Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

Receber o JSON do lado do servidor.

Fala galera, estou com uma dúvida quanto ao recebimento da nossa lista de alunos em JSON. Como eu faria para receber esse POST e tratá-lo em PHP por exemplo. Sei que temos lá o json_decode e tal, só não sei qual parâmetro estamos recebendo lá no "http://www.caelum.com.br/mobile" ou em qualquer outra URL. Por exemplo:

<?php
     $json = $_POST['oQueReceberAqui']; \\???    
?>

A classe WebClient está assim:

public class WebClient {
    private String url;

    public WebClient(String url){
        this.url = url;
    }

    public String post(String json){
        try {
            HttpPost post = new HttpPost(url);
            post.setEntity(new StringEntity(json));
            post.setHeader("Content-type", "application/json");            
            post.setHeader("Accept", "application/json");                        
            HttpClient client = new DefaultHttpClient();
            HttpResponse resposta = client.execute(post);            
            return EntityUtils.toString(resposta.getEntity());
        } 
        catch (IOException e) {
            e.printStackTrace();
            return null;
        }                
    }
}

E o método doInBackground():

protected String doInBackground(Object... params) {
        AlunoDAO dao = new AlunoDAO(ctx);
        List<Aluno> lista = dao.getLista();
        AlunoConverter alunoConverter = new AlunoConverter();
        String listaJSON = alunoConverter.toJSON(lista);
        Log.i("Lista", listaJSON);
        dao.close();

        String media = new WebClient("http://www.minhaurl.com.br/index.php).post(listaJSON);

        return media;
    }

Por favor dá um help!!!

Abs

7 respostas

Oi Adriano,

O conteúdo virá como sendo o post completo. Faz o seguinte e vê se consegue algum resultado:

var_dump($_POST);
die();

E coloca aqui o que é impresso do var_dump.

Pesquisando um pouco, achei outro ponto interessante. Aparentemente o PHP não coloca o resultado do post no $_POST, por que ele não entende o content-type: application/json.

Vamos tentar ler assim:

$json = file_get_contents('php://input');
$resultado = json_decode($json);
var_dump($resultado);

Veja se você consegue ler esse resultado e o que aparece como retorno.

Abraço.

Eai Paulo,

Nos dois casos ele retorna exatamente o que aparece em tela :(

var_dump($_POST); die();

Retorno no android: array(0) { }

e

$json = file_get_contents('php://input'); $resultado = json_decode($json); var_dump($resultado);

Retorno no android: NULL

É como se não estivesse chegando nada, não sei. Ele sempre retorna o que está em tela.

Se eu colocar um echo "Teste"; ele retorna na tela do android, estranho.

solução!

Então, o que você imprimir, será considerado a response do servidor para o Android. A questão é o que você está enviando.

A lista de alunos que você está enviando para o servidor, possui algum valor? Se você estiver enviando uma lista vazia, ele vai retornar o valor null mesmo.

Veja no logcat do android o que é impresso em: Log.i("Lista", listaJSON);

Abraço.

Opa!

Olhando no logcat olha o retorno

{"list":[{"aluno":[{"nome":"Adriano"}]}]

Acho que esta faltando fechar uma chave, o json está errado não é?

Paulo, funcionou!!!

$json = file_get_contents('php://input');

$resultado = json_decode($json);

var_dump($resultado);

O que estava errado era a montagem do meu JSON, o pior é que eu ja tinha dado uma olhada "por cima" na lista que estava sendo enviada. Não estava fechando a última chave.

Muito obrigado!!

public String toJSON(List alunos){ JSONStringer js = new JSONStringer();

try { js.object(); js.key("list").array(); js.object(); js.key("aluno").array();

for(Aluno aluno : alunos){ js.object(); js.key("nome").value(aluno.getNome()); js.endObject(); }

js.endArray(); js.endObject(); js.endArray(); //js.object(); ESSA LINHA ESTAVA ERRADA js.endObject(); } catch (JSONException e) { e.printStackTrace(); }

Legal, que bom que funcionou.

Feliz por ajudar, abraço e bons estudos.