Rick45 Posted August 3, 2013 at 09:42 PM Report #520787 Posted August 3, 2013 at 09:42 PM (edited) Boa noite, estou com mais um problema. eu estou a enviar um json para um servidor, no servidor faço um processamento de base de dados e depois envio um json para a app outra vez Eu estou a enviar e receber o json da seguinte maneira: private class enviarcoord extends AsyncTask{ @Override protected JSONArray doInBackground(JSONObject... params) { // TODO Auto-generated method stub JSONObject Jobj =params[0]; HttpClient httpclient = new DefaultHttpClient(); HttpResponse resposta; String respostasv =""; JSONArray jsonArr = new JSONArray(); try{ HttpPost post = new HttpPost("MEU SITE ONLINE"); post.setEntity(new StringEntity(Jobj.toString(), "UTF8")); resposta = httpclient.execute(post); Log.i("Http Response:",resposta .toString()); String temp = EntityUtils.toString(resposta.getEntity()); Log.i("tag", temp); //bota tentar StringBuilder builder = new StringBuilder(); HttpClient client = new DefaultHttpClient(); HttpGet httpGet = new HttpGet("MEU SITE ONLINE"); try { HttpResponse response = client.execute(httpGet); StatusLine statusLine = response.getStatusLine(); int statusCode = statusLine.getStatusCode(); if (statusCode == 200) { HttpEntity entity = response.getEntity(); InputStream content = entity.getContent(); BufferedReader reader = new BufferedReader(new InputStreamReader(content)); String line; while ((line = reader.readLine()) != null) { builder.append(line); } } else { Log.e(ParseException.class.toString(), "Failed to download file"); } } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } respostasv = builder.toString(); // tratar a resposta jsonArr = new JSONArray(respostasv); } catch (ClientProtocolException e) { e.printStackTrace(); Log.i("ClienteProt", "ClientProtocolException"); } catch (IOException e) { e.printStackTrace(); Log.i("IOE", "IOException"); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); Log.i("IOE", "erro a criar o array json"); } // se der erro o return vai devolver vazio return jsonArr; } no servidor recebo o json e faço o processamento assim: require_once "db/DB.php"; //connect to a database/disconnect handler. $jobj = json_decode($HTTP_RAW_POST_DATA); $earth_radius = 3960.00; # em milhas $MlocLat_1 = $jobj->Latitude; $MlocLon_1 = $jobj->Longitude; $Distancia = $jobj->Distancia; // VALORES DE TESTES /* $MlocLat_1 = "41.6529"; $MlocLon_1 = "-8.58453"; $Distancia =1; */ $conjcoord = 0; $db = DB::getDB(); $sql = "SELECT * FROM coordenada"; $idterreno=0; $result=$db->query($sql); while($row=$result->fetch_object()){ $conjcoord++; if(distance_haversine($MlocLat_1, $MlocLon_1, $row->Latitude, $row->Longitude) <= $Distancia*1000){ if($idterreno != $row->id_info){ $sql2 = "SELECT * FROM informacao WHERE Id_informacao= $row->id_info "; $result2=$db->query($sql2); while($row2=$result2->fetch_object()){ $output[]=$row2; } $idterreno =$row->id_info; } } } //########### calculo distancia entre pontos gps function distance_haversine($lat1, $lon1, $lat2, $lon2) { global $earth_radius; $delta_lat = $lat2 - $lat1 ; $delta_lon = $lon2 - $lon1 ; $alpha = $delta_lat/2; $beta = $delta_lon/2; $a = sin(deg2rad($alpha)) * sin(deg2rad($alpha)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * sin(deg2rad($beta)) * sin(deg2rad($beta)) ; $c = asin(min(1, sqrt($a))); $distance = 2*$earth_radius * $c; $distance = round($distance, 4); $distance = $distance * 1.609344; return $distance; } print (json_encode($output)); ?> o problema é o seguinte, se eu usar os valores de teste que estão comentados a app envia o json é processado e recebe o json resultante, mas quando uso os valores do json que a app envia ele é recebido na mesma é processado e o json para ser recebido é gerado igual, so que a app o que recebe é como se fosse vazio. LogCat da app a usar os valores de teste estaticos no servidor: 08-03 21:36:16.708: I/Http Response:(1001): org.apache.http.message.BasicHttpResponse@40d1f358 08-03 21:36:16.781: I/tag(1001): [{"Id_informacao":"2","Descricao":"Feira ","Nome_pessoa":"Rick","Contacto":"916456238","Morada":"Freixo "},{"Id_informacao":"11","Descricao":"Feira 2","Nome_pessoa":"Rick","Contacto":"916456238","Morada":"Freixo "},{"Id_informacao":"12","Descricao":"Feira 3","Nome_pessoa":"Rick","Contacto":"916456238","Morada":"Freixo "},{"Id_informacao":"13","Descricao":"Feira 4","Nome_pessoa":"Rick","Contacto":"916456238","Morada":"Freixo "}] LogCat da app a usar os valores que vão no json que ela envia: 08-03 21:37:50.117: I/Http Response:(1001): org.apache.http.message.BasicHttpResponse@40d64b40 08-03 21:37:50.120: I/tag(1001): [{"Id_informacao":"1","Descricao":"minha descricao","Nome_pessoa":"meu nome","Contacto":"912345678","Morada":"minha morada"},{"Id_informacao":"2","Descricao":"Feira ","Nome_pessoa":"Rick","Contacto":"916456238","Morada":"Freixo "},{"Id_informacao":"11","Descricao":"Feira 2","Nome_pessoa":"Rick","Contacto":"916456238","Morada":"Freixo "},{"Id_informacao":"12","Descricao":"Feira 3","Nome_pessoa":"Rick","Contacto":"916456238","Morada":"Freixo "},{"Id_informacao":"13","Descricao":"Feira 4","Nome_pessoa":"Rick","Contacto":"916456238","Morada":"Freixo "}] NOTA: Peço desculpa por postar tudo em modo respostas mas nao estava a conseguir postar tudo junto Edited August 3, 2013 at 09:40 PM by Rick45
Rick45 Posted August 5, 2013 at 05:37 PM Author Report #520893 Posted August 5, 2013 at 05:37 PM Boas penso que descobri qual o meu problema, so que nao sei como resolver :S penso que será aqui: try{ HttpPost post = new HttpPost("MEU SITE ONLINE"); post.setEntity(new StringEntity(Jobj.toString(), "UTF8")); resposta = httpclient.execute(post); // <---- Eu aqui executo o meu post onde envia os valores para processar no site Log.i("Http Response:",resposta .toString()); String temp = EntityUtils.toString(resposta.getEntity()); Log.i("tag", temp); //bota tentar StringBuilder builder = new StringBuilder(); HttpClient client = new DefaultHttpClient(); HttpGet httpGet = new HttpGet("MEU SITE ONLINE"); try { HttpResponse response = client.execute(httpGet); //<---- aqui eu executo o get para ir buscar os valores penso que o problema será aqui StatusLine statusLine = response.getStatusLine(); int statusCode = statusLine.getStatusCode(); if (statusCode == 200) { HttpEntity entity = response.getEntity(); InputStream content = entity.getContent(); BufferedReader reader = new BufferedReader(new InputStreamReader(content)); String line; while ((line = reader.readLine()) != null) { builder.append(line); } } else { Log.e(ParseException.class.toString(), "Failed to download file"); } } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } respostasv = builder.toString(); Penso que o problema poderá ser que quando eu faço o get os valores que enviei no post ja nao estão lá logo o servidor nao processa nada, logo nao envia nada pk nao processou. Como é que posso enviar os valores e receber o resultado na mesma "ligação"???
KTachyon Posted August 5, 2013 at 08:22 PM Report #520908 Posted August 5, 2013 at 08:22 PM Podes mandar imprimir o que tens no Jobj (com o toString()) e ver se a informação que consta está correcta. Não sei se estás a falar no GET, mas se é a isso que te referes é normal que não seja enviada nenhuma informação nessa chamada. O HTTP é stateless. O estado não é partilhado entre chamadas. “There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.” -- Tony Hoare
Rick45 Posted August 5, 2013 at 08:34 PM Author Report #520909 Posted August 5, 2013 at 08:34 PM Podes mandar imprimir o que tens no Jobj (com o toString()) e ver se a informação que consta está correcta. Não sei se estás a falar no GET, mas se é a isso que te referes é normal que não seja enviada nenhuma informação nessa chamada. O HTTP é stateless. O estado não é partilhado entre chamadas. pois, o problema era mesmo esse, quando eu fazia o get ja nao havia valores lá, assim consegui resolver o problema visto que neste caso não precisava obrigatoriamente de enviar um json enviei os valores no no GET por url HttpGet httpGet = new HttpGet("http://OMEUSAITE/proc.php?Lat="+URLLat+"&Lon="+URLLon+"&Dist="+URLDis); no php recebi os valores com o $_GET e ficou a funcionar certinho.
KTachyon Posted August 5, 2013 at 10:14 PM Report #520917 Posted August 5, 2013 at 10:14 PM Mas podes sempre enviar por POST em JSON e receber a resposta na mesma chamada. “There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.” -- Tony Hoare
rui_martins2007 Posted February 13, 2014 at 03:46 PM Report #545154 Posted February 13, 2014 at 03:46 PM OI pessoal, estou com um problema parecido. Estou a fazer uma aplicação android e ela esta estoirando. O codigo a partida esta bem pois eu corri esse codigo noutro projecto e esta funcionando, e neste esta a estoirar. Fiz uma async task pois poderia ser de excesso de processos mas continua estoirando e nao chega a executar o comando resposta = httpclient.execute(post); alguém consegue ajudar, precisa mais detalhes?
KTachyon Posted February 13, 2014 at 07:57 PM Report #545198 Posted February 13, 2014 at 07:57 PM O que diz o log? Que erro aparece? “There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.” -- Tony Hoare
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now