Bom dia amigos, apesar de ser iniciante, postei no “Java Avançado” pq é referente a manipulação de arquivo, descupe se postei no lugar errado…
Estou iniciando com o j2me, estou com um projeto para ler um arquivo xml utilizando tal ferramenta, começei procurando uns exemplos de como realiza tal leitura.
Encontrei varios posts aqui bons sobre o tema, porém estou com uma duvida.
Estou tentando fazer com que minha aplicação leia esse xml…
<?xml version="1.0" encoding="UTF-8" ?>
- <agenda>
- <pessoa>
<nome>Arthur Oliveira</nome>
<fone>4335-9408</fone>
</pessoa>
- <pessoa>
<nome>Marilia Oliveira</nome>
<fone>4335-9408</fone>
</pessoa>
</agenda>
Coloquei o xml dentro da pasta do projeto, compilo o projeto e ele aparece a tela do emulador sem o xml, a tela vazia.
Vou postar meu fonte para analisarem e dizer o que esta errado.
package hello;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import org.kxml2.io.KXmlParser;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
public class HelloMIDlet extends MIDlet implements CommandListener {
private boolean midletPaused = false;
//<editor-fold defaultstate="collapsed" desc=" Generated Fields ">
private Command exitCommand;
private Form Pessoas;
//</editor-fold>
public HelloMIDlet() {
}
private void initialize() {
}
public void startMIDlet() {
// write pre-action user code here
switchDisplayable(null, getPessoas());
}
public void resumeMIDlet() {
}
public void switchDisplayable(Alert alert, Displayable nextDisplayable) {
// write pre-switch user code here
Display display = getDisplay();
if (alert == null) {
display.setCurrent(nextDisplayable);
} else {
display.setCurrent(alert, nextDisplayable);
}
}
public void commandAction(Command command, Displayable displayable) {
// write pre-action user code here
if (displayable == Pessoas) {
if (command == exitCommand) {
exitMIDlet();
}
}
}
public Command getExitCommand() {
if (exitCommand == null) {
// write pre-init user code here
exitCommand = new Command("Exit", Command.EXIT, 0);
// write post-init user code here
}
return exitCommand;
}
public Form getPessoas() {
if (Pessoas == null) {
// write pre-init user code here
Pessoas = new Form("Welcome", new Item[] { });
Pessoas.addCommand(getExitCommand());
Pessoas.setCommandListener(this);
// write post-init user code here
}
return Pessoas;
}
//</editor-fold>
public Display getDisplay() {
return Display.getDisplay(this);
}
public void exitMIDlet() {
switchDisplayable(null, null);
destroyApp(true);
notifyDestroyed();
}
public void startApp() {
if (midletPaused) {
resumeMIDlet();
} else {
initialize();
startMIDlet();
}
midletPaused = false;
InputStream in = getClass().getResourceAsStream("pessoas.xml");
try {
Display.getDisplay(this).setCurrent(Pessoas);
parser(in);
} catch (Exception e) {
e.printStackTrace();
}
}
private void parser(InputStream in) throws Exception {
//Inicia o XMLParser
KXmlParser parser = new KXmlParser();
parser.setInput(new InputStreamReader(in));
parser.nextTag();
//Posiciona na tag <agenda>
parser.require(XmlPullParser.START_TAG, null, "agenda");
//Enquanto é diferente de END_TAG
while (parser.nextTag () != XmlPullParser.END_TAG)
{
//Posiciona na tag <pessoa>
parser.require(XmlPullParser.START_TAG, null, "pessoa");
parserPessoa(parser);
Pessoas.append("\n");
parser.require(XmlPullParser.END_TAG, null, "pessoa");
}
parser.require(XmlPullParser.END_TAG, null, "agenda");
parser.next();
parser.require(XmlPullParser.END_DOCUMENT, null, null);
}
private void parserPessoa(KXmlParser parser) throws Exception {
//Enquanto é diferente de </pessoa>
while (parser.nextTag() != XmlPullParser.END_TAG) {
//Posiciona em uma tag "START". Ex: <nome> ou <fone>
parser.require(XmlPullParser.START_TAG, null, null);
String name = parser.getName();
String text = parser.nextText();
System.out.println("Tag: " + name + " -> " + text);
//Adiciona o texto no Form
Pessoas.append(text);
//Posiciona no fim da tag </nome> ou </fone>
parser.require(XmlPullParser.END_TAG, null, name);
}
}
public void pauseApp() {
midletPaused = true;
}
public void destroyApp(boolean unconditional) {
}
}
OBS: Estou usando Netbeans 7.0, kxml 2.2 para leitura do xml, MIDP 2.0.
Valeu gente, agradeço desde ja (: