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

Servidor retornando média 0

O servidor está retornando sempre média 0, independente do valor das notas enviadas

5 respostas

Oi Laura, obrigado por reportar. Na segunda feira vamos verificar.

Olá Laura,

Verificamos o servidor aqui e parece estar tudo ok, você poderia postar aqui o código das classes ListaAlunosActivity, AlunosConverter e WebClient, por favor? Vamos tentar descobrir o que pode estar causando o cálculo incorreto.

Vamos lá!

AlunoConverter

public class AlunoConverter {
    public String converterParaJson(List<Aluno> alunos){
        JSONStringer js = new JSONStringer();
        try {
            js.object().key("list").array().object().key("aluno").array();

            for(Aluno aluno : alunos){
                js.object();
                js.key("Nome").value(aluno.getNome());
                js.key("Nota").value(aluno.getNota());
                js.endObject();
            }
            js.endArray().endObject().endArray().endObject();

        } catch (JSONException e) {
            e.printStackTrace();
        }
        return js.toString();
    }
}

WebClient:

public class Webclient {

    public String post(String json){
        try {
            URL url = new URL("https://www.caelum.com.br/mobile"); 
            HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 

            connection.setRequestProperty("Content-type", "application/json"); 
            connection.setRequestProperty("Accept", "application/json"); 

            connection.setDoOutput(true);
            connection.setDoInput(true);

            OutputStream out = connection.getOutputStream();
            PrintStream outPut = new PrintStream(out); 
            outPut.println(json);

            connection.connect(); 

            InputStream inp = connection.getInputStream(); 
            Scanner scanner = new Scanner(inp); 
            String resposta = scanner.next(); 
            return resposta;

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
}

ListaAlunosActivity

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch(item.getItemId()){
            case R.id.menu_enviar_notas:
                new EnviaAlunosTask(this).execute();
                break;
        }
        return super.onOptionsItemSelected(item);
    }

EnviaAlunosTask

@Override
    protected String doInBackground(Void... objects) {
        AlunoDAO dao = new AlunoDAO(contexto);
        List<Aluno> alunos = dao.buscaAlunos();
        dao.close();

        AlunoConverter conversor = new AlunoConverter();
        String json = conversor.converterParaJson(alunos);

        Webclient client = new Webclient();
        String resposta = client.post(json);

        return resposta;
    }
solução!

Ok, vamos tentar fazer uma pequena alteração na classe AlunoConverter. Notei que as chaves que estão sendo enviadas no JSON estão com a primeira letra em maiúscula. Vamos tentar alterar para:

js.key("nome").value(aluno.getNome());
js.key("nota").value(aluno.getNota());

Além disso, tenho uma outra pergunta. Quando você recebe a resposta do servidor ele chega a enviar um json escrito: {media: 0, quantidade: 0}?

Boa tarde Jeferson! Eu estava recebendo a resposta do servidor assim:

{"media": "0", "quantidade": 11}

Agora troquei a primeira letra das chaves para minúsculas e resolveu, obrigada!