Este post tem o principal intúito de mostrar a comunicação entre um
dispositivo Android e um servidor webservice REST através de classes que
realizam o trabalho sujo de transformar objetos em mensagens REST e
vice-versa.
Object JSON
Objeto que será transformado em JSON durante o processo de comunicação.
public class Product {
String name;
int qty;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getQty() {
return qty;
}
public void setQty(int qty) {
this.qty = qty;
}
@Override
public String toString() {
return "Product [name=" + name + ", qty=" + qty + "]";
}
}
REST Server WebService
Webservice JSON REST
Classe de webservice que define endereços REST para os processos GET e POST. Exemplo simplesmente armazena os valores vindos do POST em uma lista de objetos que é devolvida quando requisitado o endereço GET.
@Path("/json/product")
public class JSONService {
private static List lstProducts = new ArrayList();
@GET
@Path("/get")
@Produces("application/json")
public List getProductInJSON() {
return lstProducts;
}
@POST
@Path("/post")
@Consumes("application/json")
public Response createProductInJSON(Product product) {
lstProducts.add(product);
String result = "Product created : " + product;
return Response.status(201).entity(result).build();
}
}
Link do projeto server-webservice: rest-server-example
Android
A mesma classe Produto foi copiada para projeto Android.
Enviando dados
Classe que envia dados utilizando POST
public class RestPutTask extends AsyncTask<Product, Void, Boolean> {
@Override
protected Boolean doInBackground(Product... params) {
Boolean ret = Boolean.FALSE;
try {
final String urlPost = "http://MY_SERVER:8080/test/json/product/post";
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new StringHttpMessageConverter());
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
String sRet;
sRet = restTemplate.postForObject(urlPost, params[0], String.class);
Log.i("Retorno", sRet);
ret = sRet != null;
} catch (Exception e) {
Log.e("MainActivity", e.getMessage(), e);
}
return ret;
}
@Override
protected void onPostExecute(Boolean aBoolean) {
super.onPostExecute(aBoolean);
}
}
Recebendo dados
Classe que recupera objetos através de GET
public class RestGetTasks extends AsyncTask<List<String>, ArrayAdapter, Product[]>{
private ArrayAdapter adapter;
public RestGetTasks(ArrayAdapter adapter) {
this.adapter = adapter;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Product[] doInBackground(List... params) {
try {
final String urlPost = "http://MY_SERVER:8080/test/json/product/get";
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new StringHttpMessageConverter());
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
String sRet;
Product[] products = restTemplate.getForObject(urlPost, Product[].class);
params[0].clear();
for (Product p : products) {
Log.i("Produto:", p.getName() + ":" + p.getQty());
params[0].add(p.getName() + ":" + p.getQty());
}
} catch (Exception e) {
Log.e("MainActivity", e.getMessage(), e);
}
return null;
}
@Override
protected void onPostExecute(Product[] products) {
super.onPostExecute(products);
adapter.notifyDataSetChanged();
}
}
Link do projeto android rest example: android-rest-example
Referências:
Nenhum comentário:
Postar um comentário