Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Erro ao sicronizar app com servidor web

Bom dia, eu tenho uma aplicação web com tomcat, já configurei o meu REST no lado do tomcat no sistema, eu segui as videos aulas do professor, porem quando eu tenho sincronizar o meu app com o sistema web, me ocorre o seguinte erro.

2018-08-14 10:26:27.480 3231-3276/br.com.alisson.ifood E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #3
    Process: br.com.alisson.ifood, PID: 3231
    java.lang.RuntimeException: An error occurred while executing doInBackground()
        at android.os.AsyncTask$3.done(AsyncTask.java:325)
        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:243)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
        at java.lang.Thread.run(Thread.java:761)
     Caused by: java.util.NoSuchElementException
        at java.util.Scanner.throwFor(Scanner.java:874)
        at java.util.Scanner.next(Scanner.java:1388)
        at br.com.alisson.ifood.webClient.WebClient.insere(WebClient.java:34)
        at br.com.alisson.ifood.task.ProdutoTask.doInBackground(ProdutoTask.java:24)
        at android.os.AsyncTask$2.call(AsyncTask.java:305)
        at java.util.concurrent.FutureTask.run(FutureTask.java:237)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243) 
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 
        at java.lang.Thread.run(Thread.java:761) 

fiz da seguinte maneira, converti o meu objeto para uma String em formato de JSON.

public String converterObjetoParaJson(Produto produto) {

        JSONStringer js = new JSONStringer();

        try {
            js.object()
                    .key("nome").value(produto.getNome())
                    .key("descricao").value(produto.getDescricao())
                    .key("codigoBarra").value(produto.getCodigoBarra())
                    .key("avaliacao").value(produto.getAvaliacao())
                    .endObject();

        } catch (JSONException e) {
            e.printStackTrace();
        }
        return js.toString();
    }

Depois criei a classe responsável para sincronizar.

 public String insere(String json) {

        String endereco = "http://192.168.15.196:8080/produtos/api/teste";

        try {
            URL url = new URL(endereco);
            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;
    }

Depois fiz o metodo para rodar na thered secundaria.


public class ProdutoTask extends AsyncTask {

    private final Produto produto;

    public ProdutoTask(Produto produto) {
        this.produto = produto;
    }

    @Override
    protected Object doInBackground(Object[] objects) {
        String converterJson = new ConverterJson().converterObjetoParaJson(produto);
        new WebClient().insere(converterJson);
        return null;
    }
}

Depois chamei o metodo para executar logo depois de salvar ou alterar um produto.

 new ProdutoTask(produto).execute();

Alguem pode me dizer o porque desse erro?

1 resposta
solução!

Resolvido, obrigado