Senhores, boa tarde.
Estou montando uma aplicação Android para comunicar com um Webservice-rest, até então tudo tranquilo, utilizei um exemplo que encontrei na internet e comecei a codificar aqui.
Contudo surgiu um problema, quando realizo o teste da aplicação em uma versão do Android superior a 2.3 o sistema não consegue obter o retorno. Após pesquisar e perguntar em outro fórum descobri que a Google retirou a possibilidade de se chamar métodos que comunicam com a internet no método principal e que um solução para isso seria a utilização do AsyncTask.
Após realizar uma busca pela internet achei um tutorial onde o camarada explica justamente como fazer a comunicação de um Webservice-rest com o Android usando o AsyncTask. Beleza, comecei a ler, tentei fazer aqui, mas não consegui entender o conceito do AsyncTask.
Porque hoje eu tenho o seguinte ambiente aqui:
GrupoProdutoRest.java
[code]package br.com.unip.menudroid.webservice;
import java.util.ArrayList;
import java.util.List;
import br.com.unip.menudroid.model.GrupoProduto;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonParser;
public class GrupoProdutoRest {
private static final String URL_WS = "http://192.168.0.11:8080/menuDroidWeb/ws/grupoproduto/";
public List<GrupoProduto> getListaGrupoProduto() throws Exception {
String[] resposta = new GrupoProdutoWS().get(URL_WS + "listar");
if (resposta[0].equals("200")) {
Gson gson = new Gson();
ArrayList<GrupoProduto> listaGrupoProduto = new ArrayList<GrupoProduto>();
JsonParser parser = new JsonParser();
JsonArray array = parser.parse(resposta[1]).getAsJsonArray();
for (int i = 0; i < array.size(); i++) {
listaGrupoProduto.add(gson.fromJson(array.get(i), GrupoProduto.class));
}
return listaGrupoProduto;
} else {
throw new Exception(resposta[1]);
}
}
}
[/code]
GrupoProdutoWS.java
[code]package br.com.unip.menudroid.webservice;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import android.util.Log;
public class GrupoProdutoWS {
public final String[] get(String url) {
String[] result = new String[2];
HttpGet httpget = new HttpGet(url);
HttpResponse response;
try {
response = HttpClientSingleton.getHttpClientInstace().execute(
httpget);
HttpEntity entity = response.getEntity();
if (entity != null) {
result[0] = String.valueOf(response.getStatusLine()
.getStatusCode());
InputStream instream = entity.getContent();
result[1] = toString(instream);
instream.close();
Log.i("post", "Result from post JsonPost : " + result[0]
+ " : " + result[1]);
}
} catch (Exception e) {
Log.e("NGVL", "Falha ao acessar Web service", e);
result[0] = "0";
result[1] = "Falha de rede!";
}
return result;
}
public final String[] post(String url, String json) {
String[] result = new String[2];
try {
HttpPost httpPost = new HttpPost(new URI(url));
httpPost.setHeader("Content-type", "application/json");
StringEntity sEntity = new StringEntity(json, "UTF-8");
httpPost.setEntity(sEntity);
HttpResponse response;
response = HttpClientSingleton.getHttpClientInstace().execute(
httpPost);
HttpEntity entity = response.getEntity();
if (entity != null) {
result[0] = String.valueOf(response.getStatusLine()
.getStatusCode());
InputStream instream = entity.getContent();
result[1] = toString(instream);
instream.close();
Log.d("post", "Result from post JsonPost : " + result[0]
+ " : " + result[1]);
}
} catch (Exception e) {
Log.e("NGVL", "Falha ao acessar Web service", e);
result[0] = "0";
result[1] = "Falha de rede!";
}
return result;
}
private String toString(InputStream is) throws IOException {
byte[] bytes = new byte[1024];
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int lidos;
while ((lidos = is.read(bytes)) > 0) {
baos.write(bytes, 0, lidos);
}
return new String(baos.toByteArray());
}
}
[/code]
Eu até tentei fuçar no AsyncTask, mas em cada exemplo que eu acho a pessoa faz de um jeito. Ou eles criam uma nova classe ou fazem direto no main e isso esta me deixando muito confuso, não sei como devo trabalhar.
Sem dizer que eu também não entendi como faço para chamar o método que me retorna o ArrayList (getListaGrupoProduto) e passar isso para a Intent.
Alguém poderia me dar uma ajuda???
Agradeço desde já pela a atenção!
