domingo, 4 de novembro de 2012

Android e XML em 4 passos














Olá pessoal, nesse tutorial aprenderemos a ler e interpretar arquivos XML no Android.
Antes de começarmos a fazer um exemplo, é preciso deixar claro que a plataforma disponibiliza mais de uma tecnologia(parser) para se trabalhar com XML, tais como, DOM, SAX, XMLPULLPARSER etc.
Usaremos o parser DOM, que não é o mais rápido, mas com certeza é o mais indicado para quem está iniciando, devido a sua facilidade de uso.
Caso você não conheça XML, aqui vai um bom local para começar a aprender... http://www.w3schools.com/xml/ e caso você já conheça... lá vamos nós... :)


Passo 1. Criando o projeto

Crie um projeto Android com o nome ProjetoXML.
(File > New > Other > Android > Android Application Project)


Passo 2. Criando o arquivo XML

Abra seu editor de textos(ou xml) preferido e crie um arquivo chamado conteudo.xml com a estrutura exemplificada.

<?xml version="1.0"?>
<contatos>
   <contato>
      <nome>StrangerDroidBlog</nome>
<apelido>StrangerDroid</apelido>
      <site>http://strangerdroid.blogspot.com.br/</site>
   </contato>
   <contato>
      <nome>SaiuDaGaragemBlog</nome>
      <apelido>SaiuDaGaragem</apelido>
      <site>http://www.saiudagaragem.com.br/</site>
   </contato>
</contatos>

Note que na estrutura temos:
- Uma lista de contatos (2 contatos)
- Cada contato possui uma série de características (nome, apelido e site)


Passo 3. Embarcando o arquivo

Copie o arquivo para a pasta assets do seu projeto


Passo 4. Lendo e interpretando o conteúdo XML

Coloque um botão na sua interface e no evento de clique, faça a chamada da função demonstrada.

private void processarConteudoXML() {
  try {
    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();    
    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
    Document doc = dBuilder.parse(getAssets().open("conteudo.xml"));
    doc.getDocumentElement().normalize();

    NodeList nodeContatos = doc.getElementsByTagName("contato");
    int counter = nodeContatos.getLength();

    for (int i=0; i<counter; i++) {
        Node item = nodeContatos.item(i);

        if (item.getNodeType() == Node.ELEMENT_NODE) {
            Element element = (Element) item;
            Node nodeNome = element.getElementsByTagName("nome").item(0).getChildNodes().item(0);
            Toast.makeText(getApplicationContext(), nodeNome.getNodeValue(), Toast.LENGTH_LONG).show();
        }
    }
  }catch(Exception e){
     e.printStackTrace();
  }
}


Note que criamos instâncias de DocumentBuilderFactory e DocumentBuilder para preparar a entrada do conteúdo XML dentro de Document, onde parseamos as informações que estão no arquivo (conteudo.xml) na pasta assets.
Na parte final, antes de começarmos a ler, executamos o comando normalize que limpa eventuais informações desnecessárias a estrutura.
Carregamos todas as tags nomeadas "contato" e percorremos a lista de itens localizados.
Ao carregar cada tag localizada, verificamos se ela é do tipo Element para que possamos fazer a leitura da tag "nome" e por fim exibirmos seu valor em um Toast.
Bastante simples, não é mesmo?
É claro que estruturas mais complexas e extensas, tais como feeds RSS serão lidos mais rapidamente se usarem XMLPULLPARSER ao invés de DOM.
Caso você tenha interesse em saber como funciona o parser XMLPULLPARSER, verifique essa URL http://developer.android.com/training/basics/network-ops/xml.html
Caso tenha dúvidas, envie-nos um email em strangerdroid@gmail.com

Um grande um abraço e bons estudos. :)

StrangerDroid


Nenhum comentário:

Postar um comentário