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?