Solucionado (ver solução)
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 ?