Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
12
respostas

Problema com endereco webservice

Pessoal, ao final do modulo Android II o servidor nao retornou a string. Quando tento acessar o endereco www.caelum.com.br/mobile da inexistente. Isso realmente esta acontecendo? O codigo esta certinho mas o Toast retorna vazio ao inves da media calculada.

Complementando, quando analiso o log recebo esta mensagem: java.io.FileNotFoundException: https://www.caelum.com.br/mobile

12 respostas

Oi Gabriel, tudo bem ?

A página só pode ser acessada via post.

Além disso, pode mandar seu código para analisarmos o que tá rolando ?

Ola, segue meu codigo da classe WebClient. Quando analiso o log existe o retorno de uma exception de filenotfound.

public class WebClient {
    private Context context;

    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);//saida do posto pro servidor

            PrintStream output = new PrintStream(connection.getOutputStream());
            output.println(json);//escreve no output o json que foi criado

            connection.connect();

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

            return resposta;

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

Voce esqueceu de indicar que é um post, rs.

            connection.setRequestMethod("POST");

Ja alterei o codigo, mas continuo recebendo o erro abaixo.

W/System.err: java.io.FileNotFoundException: https://www.caelum.com.br/mobile
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.setRequestMethod("POST");

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

            connection.setDoOutput(true);

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

            connection.connect();
            String resposta = new Scanner(connection.getInputStream()).next();


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

        return "deu ruim";
    }
}

Testa assim, acabei de rodar e funcionou

Matheus, acredito que nao estou conseguindo explicar direitinho o que esta acontecendo. Vamos la...Alterei o codigo e deixei igualzinho o seu. O que acontece eh que a estrutura do arquivo json esta certinha e tudo mais (ja validei isso), mas o metodo post esta retornando "deu ruim". No logcat do Android Studio aparece a mesma mensagem de sempre...filenotfound https://www.caelum.com.br/mobile. A estrutura destino para esta comunicacao realmente eh https://www.caelum.com.br/mobile? Ou esta faltando um nome de arquivo ou algo do tipo? Sera que o problema eh no formato do meu arquivo json?

Quando voce diz que funcionou com vc, quer dizer que retornou a media calculada do servidor? Que nao retornou "deu ruim"?

Mostrou o json mesmo ! {qtd : 5 , media : 8.0}

Me mostra seu json, como está mandando ?

Opa, o json gerado eh este abaixo...

{"List":[{"aluno":[{"nome":"Samantha","nota":10},{"nome":"Gabriel","nota":10}]}]}

Tem que ser list minusculo, imagino que esse seja o problema

Continua entrando na opcao "deu ruim". Segue log abaixo. JSON gerado: {"list":[{"aluno":[{"nome":"Samantha","nota":10},{"nome":"Gabriel","nota":10}]}]}

04-06 18:37:02.910 13208-13712/com.gabrielmob.agenda W/System.err: java.io.FileNotFoundException: https://www.caelum.com.br/mobile
04-06 18:37:02.910 13208-13712/com.gabrielmob.agenda W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:238)
04-06 18:37:02.910 13208-13712/com.gabrielmob.agenda W/System.err:     at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getInputStream(DelegatingHttpsURLConnection.java:210)
04-06 18:37:02.910 13208-13712/com.gabrielmob.agenda W/System.err:     at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:25)
04-06 18:37:02.910 13208-13712/com.gabrielmob.agenda W/System.err:     at com.gabrielmob.agenda.WebClient.post(WebClient.java:39)
04-06 18:37:02.910 13208-13712/com.gabrielmob.agenda W/System.err:     at com.gabrielmob.agenda.EnviaAlunosTask.doInBackground(EnviaAlunosTask.java:49)
04-06 18:37:02.910 13208-13712/com.gabrielmob.agenda W/System.err:     at com.gabrielmob.agenda.EnviaAlunosTask.doInBackground(EnviaAlunosTask.java:18)
04-06 18:37:02.910 13208-13712/com.gabrielmob.agenda W/System.err:     at android.os.AsyncTask$2.call(AsyncTask.java:295)
04-06 18:37:02.910 13208-13712/com.gabrielmob.agenda W/System.err:     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
04-06 18:37:02.910 13208-13712/com.gabrielmob.agenda W/System.err:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
04-06 18:37:02.910 13208-13712/com.gabrielmob.agenda W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
04-06 18:37:02.910 13208-13712/com.gabrielmob.agenda W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
04-06 18:37:02.910 13208-13712/com.gabrielmob.agenda W/System.err:     at java.lang.Thread.run(Thread.java:818)
solução!

Gabriel,

Acabei de testar com esse seu json, deu certo.

Um jeito bom de vermos isso é me passando o seu sistema e eu rodar na minha máquina.

Como devo passar o meu sistema ?