Bom tarde galera, criei uma webservice em java que retorna o seguinte:
{“cliente”:[{“cpf”:“111222333-00”,“endereco”:“Rua das ruas, 9”,“id”:“1”,“nome”:“Alexandre Antunes”},{“cpf”:“060081304-56”,“endereco”:“Rua pessoa de melo, 455”,“id”:“2”,“nome”:“Valério Bezerra Leite”},{“cpf”:“00000000000”,“endereco”:“Rua pessoa de melo, 455”,“id”:“3”,“nome”:“Teste”}]}
até aí tudo bem, mas quando fui testar se tava rodando simplesmente não faz nada e depois de muito tempo ele retorna o erro
06-08 18:45:29.594: E/GetHttp(569): org.apache.http.conn.ConnectTimeoutException: Connect to /10.0.0.2:8080 timed out
06-08 18:45:29.599: E/WS(569): org.json.JSONException: End of input at character 0 of
Logo abaixo esta o código:
public class Exemolows extends Activity {
private String page;
private ProgressDialog pd;
private String URL_WS = "http://10.0.0.2:8080/WebServiceREST/buscarTodos";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Progresso por tempo indeterminado.
pd = null;
pd = ProgressDialog.show(this,"Aguarde", "Sincronizando com WebService", true, false);
//Inicia-se uma Thread para processar o webservice
try{
Thread thread = new Thread();
thread.start();
}catch (Exception e) {
pd.dismiss();
Log.e("WS", e.toString());
}
this.JSONFile(URL_WS);
}
private void JSONFile(String url){
try{
//Le a pagina
GetHttp http = new GetHttp(url);
// page contem a string json
page = http.page;
//nativo do SDK da o parse da string json
JSONObject object = (JSONObject) new JSONTokener(page).nextValue();
// monta o array do retorno do json, lembrando que retorno é o PAI do json impresso em page.
//{"retorno":[ {"campo1":"valor1"},{"campo2":"valor2"},{"campo3":"valor3"} ]}
JSONArray message = object.getJSONArray("cliente");
//Percorre o array retornado
//campo1, 2 e 3 são os nós da string json {"campo1":"valor1"},{"campo2":"valor2"},{"campo3":"valor3"}
for(int i=0;i<message.length();i++){
JSONObject lines = (JSONObject) new JSONTokener(message.getString(i)).nextValue();
Log.i("WS", "[Retorno do WS]");
Log.i("WS", "Retorno: "+ lines.getString("cpf") );
Log.i("WS", "Retorno: "+ lines.getString("endereco") );
Log.i("WS", "Retorno: "+ lines.getString("nome") );
Log.i("WS", "[/Retorno do WS]");
}
Log.i("WS", "Sincronizado com sucesso");
pd.dismiss();
}catch (Exception e) {
Log.e("WS",e.toString());
}
}
//Classe de apoio geralmente em outro arquivo .java
// Essa classe pode ser entendia mas a princípio não precisa-se mexer nela, ela funciona apenas coloquea no projeto.
// A função dela, basicamente é acessar a pagina que imprime a string json, ler essa string, e coloca-la em page.
class GetHttp {
public String page = "";
public GetHttp(String URL) throws Exception{
BufferedReader bufferedReader = null;
try{
HttpClient client = new DefaultHttpClient();
client.getParams().setParameter(CoreProtocolPNames.USER_AGENT, "android");
HttpGet request = new HttpGet();
request.setHeader("Content-Type", "text/plain; charset=utf-8");
request.setURI(new URI(URL));
HttpResponse response = client.execute(request);
bufferedReader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
StringBuffer stringBuffer = new StringBuffer("");
String line = "";
String NL = System.getProperty("line.separator");
Log.d("GetHttp","Iniciando leitura de buffer.");
while ((line = bufferedReader.readLine()) != null){
stringBuffer.append(line + NL);
Log.d("GetHttp", stringBuffer.toString());
}
bufferedReader.close();
Log.d("GetHttp", "Leitura de buffer finalizada");
page = stringBuffer.toString();
}catch (Exception e) {
Log.e("GetHttp", e.toString());
}finally{
if (bufferedReader != null){
try{
bufferedReader.close();
}catch (IOException e){
Log.e("GetHttp", e.toString());
}
}
}
}
}
}
Obs: Coloquei a permissão pra Internet no manifest.