ChoiseGroup não aparece correto no celular

3 respostas
W

Fiz uma aplicação aqui e utilizei um choisegroup, que é montado a partir de um arquivo xml. No emulador ele funciona corretamente, mas quando passei pro Motorola W510, não apareceu correto… o que será que aconteceu???

3 Respostas

lucifeler

Poste o codigo que voce fez e detalhe mais qual tipo de erro aconteceu, para que possamos ajuda-lo.
Voce testou em qual emulador? Lembre-se que cada celular renderiza a aplicação do seu proprio modo, podendo causar esses problemas mesmo

W

vamos lá! o código da aplicação é esse... quanto ao erro, ele exibe como se fosse um textfield, estranho, nem da pra explicar certinho... ainda vou testar em outros aparelhos pra ver

import java.io.IOException;  
import java.io.InputStream;  
import java.io.InputStreamReader;  
import javax.microedition.io.Connector;  
import javax.microedition.io.HttpConnection;  
import javax.microedition.midlet.*;  
import javax.microedition.lcdui.*;  
import org.kxml2.io.KXmlParser;  
import org.xmlpull.v1.XmlPullParser;  

public class Eleicoes2008 extends MIDlet implements CommandListener{

	Display display;
	Form form1 = new Form("Eleiçoes 2008 - Prefeito"); //Formulário para escolha do prefeito
	Form form2 = new Form("Eleições 2008 - Vereador"); //Formulário para escolha do vereador
	Form form3 = new Form("Confirmar votação"); //Formulário de confirmação

	//Cria os botões utilizados durante a aplicação
	Command cmSair = new Command("Sair", Command.EXIT, 1);
	Command cmVotar = new Command("Votar", Command.SCREEN, 2);
	Command cmRetornar = new Command("Retornar", Command.EXIT, 1);
	Command cmConfirmar = new Command("Confirmar", Command.SCREEN, 2);
	private int choiceGroupIndex;
	private StringItem siPrefeito;
	private StringItem siVereador;
	ChoiceGroup cgPrefeito; //Grupo de escolha
	TextField tf; //Campo de texto

	String votoPrefeito = "";
	String votoVereador = "";

	String url="127.0.0.1:8080";
	
	InputStream in; //Guardará a Stream enviada pelo servidor
	
	//Método que acessa o arquivo xml no servidor
	protected void acessaXML() {
		Thread t=new Thread (){
			public void run() {
				try {
					//Abre a conexão
					HttpConnection con = (HttpConnection)Connector.open("http://" + url + "/Eleicoes2008/votacao.xml");
					in = con.openInputStream();
					
					parser(in); //Chama o método que inicia a tradução do XML
		
				} catch (IOException ex) {
					ex.printStackTrace();
				}
				catch (Exception e) {
					e.printStackTrace();
				}
			}
		};
		t.start();
	}

	//Faz outra conexão e envia os candidatos escolhidos
	protected void enviaVoto() {

		Thread t=new Thread() {
			public void run() {
				String situacao = "";
				StringBuffer mensagem = new StringBuffer();
				try
				{
					HttpConnection con = (HttpConnection)Connector.open("http://" + url + "/Eleicoes2008/Eleicoes2008?votoP=" + votoPrefeito + "&votoV=" + votoVereador);
					int status = -1;
					status = con.getResponseCode();

					if (status == HttpConnection.HTTP_OK) {
						InputStream is = con.openInputStream();
						int lido = is.read();
						lido = is.read();
						lido = is.read();
						while (lido != -1) {
							byte b1 = (byte) lido;
							mensagem.append( (char) b1);
							lido = is.read();
						}
						situacao = mensagem.toString();
					}
					else {
						situacao = "Erro na Conexão";
					}
					form3.append(situacao);
				}
				catch (IOException e) {
				}
			}
		};
		t.start();
		form3.removeCommand(cmRetornar);
		form3.removeCommand(cmConfirmar);
		form3.addCommand(cmSair);
		display.setCurrent(form3);
		//form3.setCommandListener(this);
	}
	
	protected void startApp() throws MIDletStateChangeException{

		acessaXML();
		display = Display.getDisplay(this); //Referência ao objeto Display

		//Seta os elementos do Form1 (Prefeito)
		cgPrefeito = new ChoiceGroup("Escolha seu candidato a prefeito", Choice.EXCLUSIVE);
		form1.append(cgPrefeito);
		form1.addCommand(cmSair);
		form1.addCommand(cmVotar);
		form1.setCommandListener(this);	

		display.setCurrent(form1);

		//Seta os elementos do Form2 (Vereador)
		tf = new TextField("Digite o número do seu candidato a vereador: ", "", 10, TextField.ANY);
		form2.append(tf);
		form2.addCommand(cmRetornar);
		form2.addCommand(cmVotar);
		form2.setCommandListener(this);

		//Seta os elementos do Form3 (Confirmação)
		form3.addCommand(cmRetornar);
		form3.addCommand(cmConfirmar);
		form3.setCommandListener(this);
	}

	private void parser(InputStream in) throws Exception {

		//inicia o xmlparser
		KXmlParser parser = new KXmlParser();
		parser.setInput(new InputStreamReader(in));

		parser.nextTag();

		//posiciona na primeira tag <votacao>
		String tag_inicio = parser.getName();
		System.out.println("Início: " + tag_inicio);
		parser.require(XmlPullParser.START_TAG, null, tag_inicio); 

		//enquanto é diferente de end_tag
		while (parser.nextTag() != XmlPullParser.END_TAG) {
			
			//posiciona na tag <prefeito>
			parser.require(XmlPullParser.START_TAG, null, "prefeito");
			parserPrefeito(parser);
			form1.append("\n");
			parser.require(XmlPullParser.END_TAG, null, "prefeito");
		}

		parser.require(XmlPullParser.END_TAG, null, tag_inicio);
		parser.next();

		parser.require(XmlPullParser.END_DOCUMENT, null, null);
	}

	private void parserPrefeito(KXmlParser parser) throws Exception {
		
		//enquanto é diferente de </prefeito>
		while (parser.nextTag() != XmlPullParser.END_TAG) {

			//posiciona em uma tag "start". ex: <nome>
			parser.require(XmlPullParser.START_TAG, null, null);

			String name = parser.getName();
			String text = parser.nextText();
		
			System.out.println("Tag: " + name + " -> " + text);

			//adiciona como um item do menu
			cgPrefeito.append(text, null);
			
			//adiciona o texto no form
			//form.append(text);

			//posiciona no fim da tag </nome>
			parser.require(XmlPullParser.END_TAG, null, name);
		}
	}

	public void pauseApp() {
	}
	
	public void destroyApp(boolean unconditional) {
		notifyDestroyed();
	}

	//Função que trata as ações dos botões da aplicação
	public void commandAction(Command c, Displayable s) {
		if (s == form1) {
			if(c == cmSair)	{
				destroyApp(true);
				notifyDestroyed();
			}
			else if (c == cmVotar) {
				//se for confirmado o voto para prefeito, seta para a formulário do vereador
				display.setCurrent(form2);
			}
		}

		else if (s == form2) {
			if (c == cmRetornar) {
				display.setCurrent(form1); //retorna ao form1
			}
			else if (c == cmVotar) {
				votoPrefeito = cgPrefeito.getString(cgPrefeito.getSelectedIndex()).replace(' ', '+');
				votoVereador = tf.getString().replace(' ', '+');
				siPrefeito = new StringItem("Prefeito: ", votoPrefeito);
				siVereador = new StringItem("Vereador: ", votoVereador);
				form3.append(siPrefeito);
				form3.append(siVereador);
				display.setCurrent(form3);
			}
		}

		else if (s == form3) {
			if (c == cmRetornar) {
				//APAGAR O CONTEUDO DAS STRING_ITENS
				display.setCurrent(form2);
			}
			else if (c == cmConfirmar) {
				enviaVoto();
			}
			else if (c == cmSair) {
				destroyApp(true);
				notifyDestroyed();
			}
		}
	}
}
W

ahh, e testei no emulador do Wireless Toolkit

Criado 23 de novembro de 2007
Ultima resposta 23 de nov. de 2007
Respostas 3
Participantes 2