Ir para o conteúdo
Rick45

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

Mensagens Recomendadas

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

Editado por Rick45

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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"???

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.