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

Duvida URL web-service curso android studio

Boa Noite, Estou realizando os exercícios de integração da minha app android com webService e estou recebendo a excetion abaixo e não tenho ideia clara do motivo.

W/System.err: java.io.FileNotFoundException: https://www.caelum.com.br/mobile
W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:238)
W/System.err:     at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getInputStream(DelegatingHttpsURLConnection.java:210)
W/System.err:     at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java)
W/System.err:     at br.com.alura.agemda.web.WebClient$override.post(WebClient.java:30)
W/System.err:     at br.com.alura.agemda.web.WebClient$override.access$dispatch(WebClient.java)
W/System.err:     at br.com.alura.agemda.web.WebClient.post(WebClient.java:0)
W/System.err:     at br.com.alura.agemda.async.EnviarAlunosTask.doInBackground(EnviarAlunosTask.java:47)
W/System.err:     at br.com.alura.agemda.async.EnviarAlunosTask.doInBackground(EnviarAlunosTask.java:21)
W/System.err:     at android.os.AsyncTask$2.call(AsyncTask.java:295)
W/System.err:     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
W/System.err:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
W/System.err:     at java.lang.Thread.run(Thread.java:818)
9 respostas

Eae Robson, tudo certo?

Já conseguiu resolver esse problema? Se não posta seu código ai pra gente dar uma olhada.

Olá Jabel, a implementação é a mesma utilizada no curso, mas segue de toda via segue a classe que realiza a comunicação


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

            //Garantir que a requisicao seja via POST
            connection.setDoOutput(true);
            connection.setDoInput(true);
            PrintStream output=new PrintStream(connection.getOutputStream());
            output.println(json);

            connection.connect();

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

            return respotas;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

}

Robson o problema deve estar na URL, pois tentei acessa-la e não obtive sucesso, se não para seu código funcionar a URL de acesso deve devolver um JSON porém esta dando erro 500.

Bom testei com sua implementação e aqui funcionou certinho, talvez seja em alguma outra parte.

Jabel, a classe que mandei é a mesma utilizada no curso e o trace disparado vem dela na hora de obter o resultado via InputStream.

Oi Robson, você poderia postar sua classe AlunoConverter também pra que a gente verifique.

Segue


public class AlunoConverter {

    public String converterParaJson(List<Aluno> alunos) {
        JSONStringer js=new JSONStringer();
        try {
            js=js.object().key("List").array().object().key("aluno").array();
            for (Aluno aluno:alunos) {
                    js.object().key("nome").value(aluno.getNome()).key("nota").value(aluno.getNota());
                    js.endObject();
            }
            js.endArray().endObject().endArray().endObject();
        } catch (JSONException e) {
            e.printStackTrace();
        }


        return js.toString();
    }
}
solução!

Oi Robson edita dessa forma e roda:

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().key("nome").value(aluno.getNome()).key("nota").value(aluno.getNota());
                    js.endObject();
            }
            js.endArray().endObject().endArray().endObject();
        } catch (JSONException e) {
            e.printStackTrace();
        }


        return js.toString();
    }

As únicas mudanças foram na montagem da String não atribui pra js e além disso a chave estava List substitui pra list. Quando o nosso json está incorreto sempre recebemos erro 500, eu recebi várias vezes esse erro até descobrir que meu json estava errado.

Oi Robson, caso persista alguma dúvida a respeito desse exercício ou curso pode perguntar aqui mesmo ou se você não tiver mais nenhuma dúvida a respeito você pode marcar uma resposta como solução, finalizando assim esse tópico.Espero ter ajudado. Bons estudos.