Jump to content
Sign in to follow this  
Rick45

[Resolvido] Problema Android envio app->servidor servidor->app

Recommended Posts

Rick45

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 by Rick45

Share this post


Link to post
Share on other sites
Rick45

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"???

Share this post


Link to post
Share on other sites
KTachyon

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

Share this post


Link to post
Share on other sites
Rick45

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.

Share this post


Link to post
Share on other sites
KTachyon

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

Share this post


Link to post
Share on other sites
rui_martins2007

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?

Share this post


Link to post
Share on other sites
KTachyon

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

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.