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

Erro no web Service, class:AsyncTask

Após consulta o fórum e a parte escrita das aulas, não conseguir resolver o problema. Está gerando um FATAL EXCEPTION: AsyncTask. Subir o código no drive pra ver se alguém pode da uma olhada e me ajudar. https://drive.google.com/file/d/1US-I75_A-PUl09j5SfyVKA0R-YUjf145/view?usp=sharing .Segue o erro:

E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
                  Process: br.com.italo.agenda, PID: 6976
                  java.lang.RuntimeException: An error occurred while executing doInBackground()
                      at android.os.AsyncTask$3.done(AsyncTask.java:309)
                      at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
                      at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
                      at java.util.concurrent.FutureTask.run(FutureTask.java:242)
                      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
                      at java.lang.Thread.run(Thread.java:818)
                   Caused by: java.util.NoSuchElementException
                      at java.util.Scanner.next(Scanner.java:968)
                      at java.util.Scanner.next(Scanner.java:941)
                      at br.com.italo.agenda.WebClient.post(WebClient.java:36)
                      at br.com.italo.agenda.EnviaAlunostask.doInBackground(EnviaAlunostask.java:43)
                      at br.com.italo.agenda.EnviaAlunostask.doInBackground(EnviaAlunostask.java:17)
E/WindowManager: android.view.WindowLeaked: Activity br.com.italo.agenda.ListaAlunosActivity has leaked window com.android.internal.policy.PhoneWindow$DecorView{58ef122 V.E...... R......D 0,0-668,322} that was originally added here
                     at android.view.ViewRootImpl.<init>(ViewRootImpl.java:570)
                     at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:326)
                     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:109)
                     at android.app.Dialog.show(Dialog.java:491)
                     at android.app.ProgressDialog.show(ProgressDialog.java:151)
                     at android.app.ProgressDialog.show(ProgressDialog.java:139)
                     at br.com.italo.agenda.EnviaAlunostask.onPreExecute(EnviaAlunostask.java:28)
                     at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:604)
                     at android.os.AsyncTask.execute(AsyncTask.java:551)
                     at br.com.italo.agenda.ListaAlunosActivity.onOptionsItemSelected(ListaAlunosActivity.java:78)
6 respostas

Fala ai Italo, de boa ?

Cara faz um favor ?

Manda para gente seu código da AsyncTask e ai vamos vendo se a gente precisa de mais coisas.

package br.com.italo.agenda;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.widget.Toast;
import java.util.List;
import br.com.italo.agenda.converter.AlunoConverter;
import br.com.italo.agenda.dao.AlunoDao;
import br.com.italo.agenda.modelo.Aluno;

/**
 * Created by italo on 06/02/2018.
 */

public class EnviaAlunostask extends AsyncTask<Void, Void, String> {
    private Context context;
    private ProgressDialog dialog;
    AlunoDao dao;

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

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

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


        List<Aluno> alunos = dao.buscaAluno();
        dao.close();

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

        WebClient client = new WebClient();
        String resposta = client.post(json);
         return resposta;
    }

    @Override
    protected void onPostExecute(String resposta) {
        dialog.dismiss();
        Toast.makeText(context, resposta , Toast.LENGTH_SHORT).show();
    }
}

Imagino que o json esteja funcionando dado que você fez is exercícios anteriores.

Então imagino que o problema possa estar na classe WebClient, mostra pra gente ?

Desculpa demora..

package br.com.italo.agenda;

import java.io.IOException;
import java.io.PrintStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Scanner;

/**
 * Created by italo on 06/02/2018.
 */

public class WebClient  {

    public String post(String json){

        try {

            URL url = new URL("https://caelum.com.br/mobile");

            HttpURLConnection connection = (HttpURLConnection) url.openConnection();

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


            connection.setDoOutput(true);

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

            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;
    }
}
solução!

Faz o teste de colocar :

URL url = new URL("https://www.caelum.com.br/mobile");

Obrigado Matheus Brandino, pelo ajuda, passou batido essa parte. boas festas!!