Bom dia galera eu estou quebrando a cabeça faz dias e agora cheguei em um ponto em que não estou conseguindo progredir por isso resolvi postar essa dúvida criei um webservice para que eu possa acessar uma base de dados remota via android. Entretanto o mesmo vêm conseguind se conectar com o web service, mas por algum motivo ele não consegue desempacotar os dados trazidos pelo mesmo. Agradeço muito ajuda pois não sei mais o que fazer. Abaixo mando alguns trechos de código que talvez sejam importantes para que vocês possam me ajudar.
Está classe está publica na meu server tomcat
[code]
import java.util.ArrayList;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import br.com.goMob.negocio.controlador.ControladorConstrutora;
import br.com.goMob.negocio.controlador.ControladorUsuario;
import br.com.goMob.negocio.entidades.Construtora;
import br.com.goMob.negocio.entidades.Usuario;
import com.google.gson.Gson;
@Path("/Dados")
public class RetornarDados {
private ControladorConstrutora cc = new ControladorConstrutora();
private ControladorUsuario cu=new ControladorUsuario();
//private ControladorImovel ci=new ControladorImovel();
@GET
@Path("/buscarConstrutoras")
@Produces("application/json")
public ArrayList<Construtora> buscarConstrutoras() {
return (ArrayList<Construtora>) cc.listarConstrutoras();
}
@GET
@Path("/buscarCorretores")
@Produces("application/json")
public ArrayList<Usuario> buscarUsuarios(){
return (ArrayList<Usuario>)cu.listarCorretores();
}
@GET
@Path("/buscarConstrutorasGSON")
@Produces("application/json")
public String sellbuscarConstrutorasGSON() {
return new Gson().toJson(cc.listarConstrutoras());
}
@GET
@Path("/buscarCorretoresGSON")
@Produces("application/json")
public String selbuscarUsuariosGSON() {
return new Gson().toJson(cc.listarConstrutoras());
}
}[/code]
Essa classe faz o meio de campo para ligação entre as aplicações
package br.com.goMobAndroid.util;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
public class HttpRetornarDados {
private static final int JSON_CONNECTION_TIMEOUT = 3000;
private static final int JSON_SOCKET_TIMEOUT = 5000;
private static HttpRetornarDados instance;
private HttpParams httpParameters;
private DefaultHttpClient httpclient;
private void setTimeOut(HttpParams params) {
HttpConnectionParams.setConnectionTimeout(params,JSON_CONNECTION_TIMEOUT);
HttpConnectionParams.setSoTimeout(params, JSON_SOCKET_TIMEOUT);
}
private HttpRetornarDados() {
httpParameters = new BasicHttpParams();
setTimeOut(httpParameters);
httpclient = new DefaultHttpClient(httpParameters);
}
public static DefaultHttpClient getHttpClientInstace() {
if (instance == null)
instance = new HttpRetornarDados();
return instance.httpclient;
}
}
Web Service
[code]
package br.com.goMobAndroid.util;
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 WebServiceRetornarDados {
public final String[] get(String url) {
String[] result = new String[2];
HttpGet httpget = new HttpGet(url);
HttpResponse response;
try {
response = HttpRetornarDados.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("get", "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 = HttpRetornarDados.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]
A classe que representa a entidade que estou buscando tanto no sistema web quanto no android
package br.com.goMobAndroid.entidades;
import java.io.Serializable;
import java.util.Collection;
public class Construtora implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private int idConstrutora;
private String nome;
private String identificador;
private String telefone;
private boolean status;
private Collection<Imovel> imoveis;
private Collection<Usuario> usuarios;
public Construtora(int idConstrutora, String nome, String identificador,
String telefone, boolean status, Collection<Imovel> imoveis,
Collection<Usuario> usuarios) {
this.idConstrutora = idConstrutora;
this.nome = nome;
this.identificador = identificador;
this.telefone = telefone;
this.status = status;
this.imoveis = imoveis;
this.usuarios = usuarios;
}
public Construtora() {
}
public int getIdConstrutora() {
return idConstrutora;
}
public void setIdConstrutora(int idConstrutora) {
this.idConstrutora = idConstrutora;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getIdentificador() {
return identificador;
}
public void setIdentificador(String identificador) {
this.identificador = identificador;
}
public String getTelefone() {
return telefone;
}
public void setTelefone(String telefone) {
this.telefone = telefone;
}
public boolean getStatus() {
return status;
}
public void setStatus(boolean status) {
this.status = status;
}
public Collection<Imovel> getImoveis() {
return imoveis;
}
public void setImoveis(Collection<Imovel> imoveis) {
this.imoveis = imoveis;
}
public Collection<Usuario> getUsuarios() {
return usuarios;
}
public void setUsuarios(Collection<Usuario> usuarios) {
this.usuarios = usuarios;
}
}
o Erro que se apresenta na minha pilha ele se mostra várias e várias vezes se repete
at com.google.gson.Gson$FutureTypeAdapter.write(Gson.java:879)
at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68)
at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:96)
at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:60)
at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:89)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:195)
at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:89)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:195)
at com.google.gson.Gson$FutureTypeAdapter.write(Gson.java:879)
at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68)
at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:96)
at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:60)
at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:89)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:195)
at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:89)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:195)
at com.google.gson.Gson$FutureTypeAdapter.write(Gson.java:879)
at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68)
at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:96)
at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:60)
at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:89)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:195)
at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:89)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:195)
at com.google.gson.Gson$FutureTypeAdapter.write(Gson.java:879)
at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68)
at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:96)
at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:60)
at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:89)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:195)
at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:89)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:195)
at com.google.gson.Gson$FutureTypeAdapter.write(Gson.java:879)
Agradeço muito ajuda de todos estou precisando muito resolver isso e não estou conseguindo de forma nenuma. Acredito que o problema esteja nas minhas coleções
de objetos que estão na minha entidade básica deve ter algum tipo de anotação especial para que esses dados sejam capturados e lidos não ao certo, mas é algo em que estou me apegando para resolver o problema.