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

O Toast mostrando a média dos alunos não funcionou...mensagem em branco

Aparece o circulo do Toast mas sem nenhuma mensagem. Havia feito o teste antes e estava enviando os dados como o nome do aluno e a nota. Não achei o que pode estar errado.

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);

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

            connection.connect();

            Scanner scanner = new Scanner(connection.getInputStream());
            String responseServer = scanner.next();

            return responseServer;

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

        return null;

    }
}
public class SendStudentTask extends AsyncTask<Void, Void, String> {

    private Context context;
    private ProgressDialog dialog;

    public SendStudentTask(Context context) {
        this.context = context;
    }

    @Override
    protected String doInBackground(Void... params) {

        StudentDao dao = new StudentDao(context);
        List<Student> students = dao.searchStudents();
        dao.close();
        StudentConvert convert = new StudentConvert();
        String json = convert.convertToJSON(students);

        WebClient client = new WebClient();
        String averegeGrade = client.post(json);

        return averegeGrade;
    }

    @Override
    protected void onPreExecute() {
       dialog = ProgressDialog.show(context,
                "Aguarde", "Enviando Aluno", true, true);
    }

    @Override
    protected void onPostExecute(String averageGrade) {
        dialog.dismiss();

        Toast.makeText(context, averageGrade, Toast.LENGTH_LONG).show();
    }
}

`

4 respostas

Ola, tudo bom Renan?

Olhando o código não identifiquei erros

  • O Logcat apresenta algum erro? Se apresentar, manda aqui

  • Debuga o retorno da requisição, se estiver vazio, reduzimos os lugares que estamos procurando o problema

Qualquer coisa, disponibiliza o seu código no Github. fica mais fácil para identificar o problema

Bom dia Alessandro, tudo certo e com você?

O Logcat não apresenta nenhum erro. Debugando apareceu a mensagem Cannot find local variable 'data' E não apareceu mais a mensagem do Toast, ficou rodando sem parar a mensagem de aguarde..eviando alunos. Segue o código no git: https://github.com/renanparis/Agenda_Alura.git

solução!

Renan

O problema esta na classe StudentConvert, a função dela é montar o JSON seguindo o padrão que foi definido no back-end. Para corrigir o problema, você só precisa alterar as chaves do JSON que é montado no método convertToJSON

Segue correção abaixo:

 public String convertToJSON(List<Student> students) {

        JSONStringer js = new JSONStringer();
        try {
            js.object().key("list").array().object().key("aluno").array();
            for (Student student: students) {
                js.object();
                js.key("nome").value(student.getName());
                js.key("nota").value(student.getGrade());
                js.endObject();
            }
            js.endArray().endObject().endArray().endObject();
        } catch (JSONException e) {
            e.printStackTrace();
        }

        return js.toString();
    }

Oi Alessandro, estou praticando escrever os códigos em inglês e não me atentei para esse lado das chaves do servidor. Agora esta correto. Obrigado pela ajuda, Abraço!