quinta-feira, 7 de agosto de 2014

Serializando JSON no Android












Em artigos anteriores mostramos como trabalhar com JSON no android.
Dessa vez vamos detalhar um pouco mais.
Vamos transformar classes em JSON e JSON em classes. Quer ver ?


Criando o projeto

Crie um "Android Application Project".
No nosso caso, colocamos o nome do projeto de "SerializandoJSON".
















Mais uma biblioteca preciosa

















Nosso segredo está em uma biblioteca chamada GSON.
Copie o arquivo gson-2.2.4.jar (ou a versão mais recente) para a pasta "libs" do seu projeto.
















Criando o layout


Coloque dois botões no seu layout igual o exemplo.

















Criando o objeto


Crie uma classe chamada Usuario e faça a implementação conforme demonstrado.

package com.example.serializandojson;

public class Usuario {
private int id;
private String nome;
private int idade;
public Usuario() {
}

public int getId() {
return id;
}

public Usuario setId(int id) {
this.id = id;
return this;
}

public String getNome() {
return nome;
}

public Usuario setNome(String nome) {
this.nome = nome;
return this;
}

public int getIdade() {
return idade;
}

public Usuario setIdade(int idade) {
this.idade = idade;
return this;
}
}



Implementando tudo


Faça a implementação conforme demonstrado.
Estamos usando o componente Android Query, caso não o conheça leia esse artigo http://blog.mobsource.com.br/2014/08/acessando-internet-e-previsao-do-tempo.html


package com.example.serializandojson;

import com.androidquery.AQuery;
import com.google.gson.Gson;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
import android.app.Activity;

public class MainActivity extends Activity {
private AQuery aq;
private String UsuarioJSON;
private Usuario UsuarioObj;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
UsuarioObj = new Usuario();
UsuarioObj.setId(1)
 .setIdade(30)
 .setNome("Eder Fernandes");
aq = new AQuery(this);
aq.id(R.id.button1).clicked(buttonSerializarClick());
aq.id(R.id.button2).clicked(buttonDeserializarClick());
}
private View.OnClickListener buttonDeserializarClick() {
return new View.OnClickListener() {
@Override
public void onClick(View v) {
deserializar();
}
};
}
private View.OnClickListener buttonSerializarClick() {
return new View.OnClickListener() {
@Override
public void onClick(View v) {
serializar();
}
};
}
private void serializar() {
UsuarioJSON = new Gson().toJson(UsuarioObj);
Toast.makeText(getApplicationContext(), UsuarioJSON, 
      Toast.LENGTH_LONG).show();
}
private void deserializar() {
UsuarioObj = null;
UsuarioObj = new Gson().fromJson(UsuarioJSON, Usuario.class);
Toast.makeText(getApplicationContext(), UsuarioObj.getNome(), 
      Toast.LENGTH_LONG).show();
}

}




Ou para simplificar a visualização...






















































Explicando tudo


É tudo muito, muito simples. :)
Criamos uma instância da classe "Usuario" e definimos alguns valores.
Criamos uma instância do componente Android Query e definimos os cliques dos botões que chamam os seus respectivos métodos.
Em serializar transformamos o objeto "Usuario" em JSON String e no método deserializar fazemos o processo inverso.
Por que isso é bom ?
Dessa forma você pode trabalhar totalmente orientado a objetos.
Da próxima vez que você for enviar um JSON para o seu webservices considere serializar um objeto e deserializar o objeto. Dá bem menos trabalho ! :)