Ver mensagens sem resposta | Ver tópicos ativos Hoje é 08 Dez 2019, 22:05



Responder Tópico  [ 271 Mensagens ]  Ir para a página Anterior  1, 2, 3, 4, 5, 6
 [Artigo] Web Service RESTful 2 [+Consumir+Android+Code] 
Autor Mensagem
What is a Activity?
What is a Activity?

Data de registro: 25 Abr 2014, 19:13
Mensagens: 10
Mensagem Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Ola pessoal,

Onde o esta o projeto com código completo para consumir dados no android ?
Implementei no meu PC o webservice referente ao banco cliente. Ok.
Agora estou tentando implementar no notebook para simular um acesso remoto e acessar os dados no servidor.

Quando ele fala de criar um projeto ExConsumirWS, fiquei na dúvida se era um Projeto Java ou Android Application Project.

Poderia me ajudar, por favor.

Obrigado,

Silvio


04 Mai 2014, 22:46
Perfil
What is a Activity?
What is a Activity?

Data de registro: 25 Abr 2014, 19:13
Mensagens: 10
Mensagem Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Por favor desconsidere minha pergunta anterior.

Já encontrei o projeto ExConsumirWS anexo.

Obrigado

Silvio


04 Mai 2014, 22:53
Perfil
What is a Activity?
What is a Activity?

Data de registro: 25 Abr 2014, 19:13
Mensagens: 10
Mensagem Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Ola,

O WebService esta ok em parte.
Estou usando o código do primeiro webservice onde existe apenas o resource listarTodos.

No browser : http://192.168.0.100:8088/Restful/cliente/listarTodos
{"cliente":[{"cpf":"00314","endereco":"Rua 2","id":"8","nome":"zaza"},{"cpf":"00212","endereco":"Rua 1","id":"2","nome":"zeze"},{"cpf":"00314","endereco":"Rua 2","id":"7","nome":"zizi"},{"cpf":"00414","endereco":"Rua 3","id":"5","nome":"zozo"},{"cpf":"00515","endereco":"Rua 4","id":"6","nome":"zuzu"}]}

Porém no cliente android, ao clicar no botão Buscar Todos:
Mensagem: This is not a Json Array

Realmente a saída não é um array faltam os [ ].

Pode ser algo simples, mas não consegui resolver isso.
Poderia me ajudar, por favor ?

Silvio


06 Mai 2014, 00:23
Perfil
Google employee
Google employee
Avatar de usuário

Data de registro: 05 Abr 2011, 04:47
Mensagens: 1968
Localização: Rio de Janeiro
Mensagem Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
SilvioLima escreveu:
Ola,

O WebService esta ok em parte.
Estou usando o código do primeiro webservice onde existe apenas o resource listarTodos.

No browser : http://192.168.0.100:8088/Restful/cliente/listarTodos
{"cliente":[{"cpf":"00314","endereco":"Rua 2","id":"8","nome":"zaza"},{"cpf":"00212","endereco":"Rua 1","id":"2","nome":"zeze"},{"cpf":"00314","endereco":"Rua 2","id":"7","nome":"zizi"},{"cpf":"00414","endereco":"Rua 3","id":"5","nome":"zozo"},{"cpf":"00515","endereco":"Rua 4","id":"6","nome":"zuzu"}]}

Porém no cliente android, ao clicar no botão Buscar Todos:
Mensagem: This is not a Json Array

Realmente a saída não é um array faltam os [ ].

Pode ser algo simples, mas não consegui resolver isso.
Poderia me ajudar, por favor ?

Silvio


Você chegou a mudar alguma coisa no projeto?

Abraços!

_________________
Alexandre Antunes
@a3b @bemobi
Moto X

App@Bemobi: Apps Club - Loja de Apps baseada em assinatura que dá direito a usar ~400 Apps.

Campanha: Facilite sua vida e a dos outros usuários.
Objetivo: Vamos colocar a tag [RESOLVIDO] no título do tópico quando o problema for resolvido.


Use a ferramenta de busca do fórum e não espere tanto para que a sua dúvida seja respondida!

Quer trabalhar comigo??


06 Mai 2014, 13:30
Perfil WWW
What is a Activity?
What is a Activity?

Data de registro: 25 Abr 2014, 19:13
Mensagens: 10
Mensagem Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Ola,

Meu WS Restful esta ok, pequenos detalhes para ficar perfeito. Agradeço pelos tutorais e pela disponibilidade em ajudar de todos.
Deste WS eu trago uma lista com vários itens e suas respectivas informações, são ao todos 300 itens.
Queria no cliente apresentar apenas o campo nome de cada item.
Ao selecionar o item, eu apresentaria as demais informações.

Eu pensei em fazer uma busca no WS por id trazendo apenas o campo nome.
Mas isso significaria que depois eu teria que fazer uma nova busca no WS pelos demais dados do item selecionado.

Imagino que isso seria uma carga para a rede. Correto ?

Tem como filtrar a informação que desejo mostrar na listview ?

Obrigado,

Silvio


15 Mai 2014, 18:25
Perfil
What is Android?
What is Android?

Data de registro: 31 Mai 2014, 03:56
Mensagens: 2
Mensagem Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
antunes,

Não consegui implementar a asynctask para usar em versões maiores que a API 8.
Dá uma luz aí! /uu


31 Mai 2014, 06:13
Perfil
What is Android?
What is Android?

Data de registro: 31 Mai 2014, 03:56
Mensagens: 2
Mensagem Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Minha Activity com asyncTask ficou assim (apenas o método buscarTodos):

public class ExConsumirWSActivity extends Activity {

    private ProgressDialog pDialog;

    private String id;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        final EditText idEdt = (EditText) findViewById(R.id.editTextIdCliente);
        final TextView txtView = (TextView) findViewById(R.id.textView1);
        Button buscarIdBtn = (Button) findViewById(R.id.buttonBuscarPorId);
        Button buscarTodosBtn = (Button) findViewById(R.id.buttonBuscarTodos);
        Button deletarBtn = (Button) findViewById(R.id.buttonDeletarCliente);
        Button inserirBtn = (Button) findViewById(R.id.buttonInserirCliente);

        buscarTodosBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new GetAllClientes().execute();
            }
        });
    }

    private class GetAllClientes extends AsyncTask<Void, Void, Void> {
        ArrayList<Cliente> listaCliente;

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            // Showing progress dialog
            pDialog = new ProgressDialog(ExConsumirWSActivity.this);
            pDialog.setMessage("Please wait...");
            pDialog.setCancelable(false);
            pDialog.show();

        }

        @Override
        protected Void doInBackground(Void... arg0) {
            ClienteREST cliREST = new ClienteREST();
            try {
                listaCliente = (ArrayList<Cliente>) cliREST.getListaCliente();
            } catch (Exception e) {
                e.printStackTrace();
                gerarToast(e.getMessage());
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            // Dismiss the progress dialog
            if (pDialog.isShowing())
                pDialog.dismiss();
            Intent i = new Intent(getApplicationContext(), ListaClientes.class);
            i.putExtra("lista", listaCliente);
            startActivity(i);
        }
    }
}


Num AVD com API 8 funcionou tranquilo, numa maior não funciona.

O logCat apresenta isso:

05-31 21:18:10.118: E/AndroidRuntime(1989): FATAL EXCEPTION: AsyncTask #1
05-31 21:18:10.118: E/AndroidRuntime(1989): Process: com.santiago.testews, PID: 1989
05-31 21:18:10.118: E/AndroidRuntime(1989): java.lang.RuntimeException: An error occured while executing doInBackground()
05-31 21:18:10.118: E/AndroidRuntime(1989): at android.os.AsyncTask$3.done(AsyncTask.java:300)
05-31 21:18:10.118: E/AndroidRuntime(1989): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
05-31 21:18:10.118: E/AndroidRuntime(1989): at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
05-31 21:18:10.118: E/AndroidRuntime(1989): at java.util.concurrent.FutureTask.run(FutureTask.java:242)
05-31 21:18:10.118: E/AndroidRuntime(1989): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
05-31 21:18:10.118: E/AndroidRuntime(1989): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
05-31 21:18:10.118: E/AndroidRuntime(1989): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
05-31 21:18:10.118: E/AndroidRuntime(1989): at java.lang.Thread.run(Thread.java:841)
05-31 21:18:10.118: E/AndroidRuntime(1989): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
05-31 21:18:10.118: E/AndroidRuntime(1989): at android.os.Handler.<init>(Handler.java:200)
05-31 21:18:10.118: E/AndroidRuntime(1989): at android.os.Handler.<init>(Handler.java:114)
05-31 21:18:10.118: E/AndroidRuntime(1989): at android.widget.Toast$TN.<init>(Toast.java:327)
05-31 21:18:10.118: E/AndroidRuntime(1989): at android.widget.Toast.<init>(Toast.java:92)
05-31 21:18:10.118: E/AndroidRuntime(1989): at android.widget.Toast.makeText(Toast.java:241)
05-31 21:18:10.118: E/AndroidRuntime(1989): at com.santiago.views.ExConsumirWSActivity.gerarToast(ExConsumirWSActivity.java:154)
05-31 21:18:10.118: E/AndroidRuntime(1989): at com.santiago.views.ExConsumirWSActivity.access$2(ExConsumirWSActivity.java:151)
05-31 21:18:10.118: E/AndroidRuntime(1989): at com.santiago.views.ExConsumirWSActivity$GetAllClientes.doInBackground(ExConsumirWSActivity.java:134)
05-31 21:18:10.118: E/AndroidRuntime(1989): at com.santiago.views.ExConsumirWSActivity$GetAllClientes.doInBackground(ExConsumirWSActivity.java:1)
05-31 21:18:10.118: E/AndroidRuntime(1989): at android.os.AsyncTask$2.call(AsyncTask.java:288)
05-31 21:18:10.118: E/AndroidRuntime(1989): at java.util.concurrent.FutureTask.run(FutureTask.java:237)
05-31 21:18:10.118: E/AndroidRuntime(1989): ... 4 more


31 Mai 2014, 20:19
Perfil
Google employee
Google employee

Data de registro: 28 Jun 2012, 19:13
Mensagens: 1308
Localização: Itaperuna-RJ
Mensagem Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Jean, o problema é que você está mostrando um Toast no doInBackground, nesse método você não pode ter contato nenhum com sua thread principal. Seu banco deve estar em branco, ae cai no exception que mostra esse Toast. Tira ele dali que vai funcionar. Vlw!

_________________
Powell


01 Jun 2014, 13:30
Perfil
What is Android?
What is Android?

Data de registro: 12 Jul 2014, 14:41
Mensagens: 1
Mensagem Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Cara..... nao sei se alguem ainda ver esse post, mais eu copiei o codigo igual no entanto sempre da a messagem Falha na conexão, ja tentei usar o ip local e nada....


15 Jul 2014, 18:26
Perfil
Google employee
Google employee
Avatar de usuário

Data de registro: 05 Abr 2011, 04:47
Mensagens: 1968
Localização: Rio de Janeiro
Mensagem Re: Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Co
Fabio Caravalho escreveu:
Cara..... nao sei se alguem ainda ver esse post, mais eu copiei o codigo igual no entanto sempre da a messagem Falha na conexão, ja tentei usar o ip local e nada....

Explica melhor o seu problema. Coloque também a configuração do seu projeto, parte do código e etc.

Abraços!

_________________
Alexandre Antunes
@a3b @bemobi
Moto X

App@Bemobi: Apps Club - Loja de Apps baseada em assinatura que dá direito a usar ~400 Apps.

Campanha: Facilite sua vida e a dos outros usuários.
Objetivo: Vamos colocar a tag [RESOLVIDO] no título do tópico quando o problema for resolvido.


Use a ferramenta de busca do fórum e não espere tanto para que a sua dúvida seja respondida!

Quer trabalhar comigo??


18 Jul 2014, 17:51
Perfil WWW
What is Android?
What is Android?

Data de registro: 31 Jul 2014, 15:30
Mensagens: 2
Mensagem Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Antunes, parabéns pelo post!!
Grande contribuição!

Mas peguei o projeto e modifiquei para uma consulta apenas no meu banco de dados.
Quando faço o teste do WS pelo browser é retornado o JSON corretamente.
Porém ao executar no emulador me retorna o erro HTTP 405.
Estive pesquisando sobre esse erro aqui no fórum, mas só encontrei um tópico de um cara falando que no problema dele, teve a ver com a versão do android que ele estava emulando.
Você sabe se isso procede?


04 Ago 2014, 18:21
Perfil
What is Android?
What is Android?

Data de registro: 31 Jul 2014, 15:30
Mensagens: 2
Mensagem Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Antunes, problema resolvido.
Estava passando uma string como parâmetro na minha URL.
Porém essa string estava estourando o limite de caracteres no meu WS.


05 Ago 2014, 10:55
Perfil
What is Android?
What is Android?

Data de registro: 03 Fev 2012, 09:57
Mensagens: 1
Mensagem Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Olá Antunes,
Criei o projeto com algumas alterações para adaptar ao meu projeto, estou usando um banco msyql. O meu webservice, está funcionando perfeitamente, retornando o json o banco. Mas qdo vou rodar pelo emulador dá erro "Falha na rede" e falha ao acessar o web service como abaixo:

09-03 15:47:12.921:
E/NGVL(658): Falha ao acessar Web service
09-03 15:47:12.921:
E/NGVL(658): android.os.NetworkOnMainThreadException
09-03 15:47:12.921:
E/NGVL(658): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117)
09-03 15:47:12.921:
E/NGVL(658): at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
09-03 15:47:12.921:
E/NGVL(658): at libcore.io.IoBridge.connectErrno(IoBridge.java:144)
09-03 15:47:12.921:
E/NGVL(658): at libcore.io.IoBridge.connect(IoBridge.java:112)
09-03 15:47:12.921:
E/NGVL(658): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
09-03 15:47:12.921:
E/NGVL(658): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
09-03 15:47:12.921:
E/NGVL(658): at java.net.Socket.connect(Socket.java:842)
09-03 15:47:12.921:
E/NGVL(658): at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119)
09-03 15:47:12.921:
E/NGVL(658): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144)
09-03 15:47:12.921:
E/NGVL(658): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
09-03 15:47:12.921:
E/NGVL(658): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
09-03 15:47:12.921:
E/NGVL(658): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
09-03 15:47:12.921:
E/NGVL(658): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
09-03 15:47:12.921:
E/NGVL(658): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
09-03 15:47:12.921:
E/NGVL(658): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
09-03 15:47:12.921:
E/NGVL(658): at br.com.cactus.webservice.WebServiceCliente.get(WebServiceCliente.java:25)
09-03 15:47:12.921:
E/NGVL(658): at br.com.cactus.webservice.ClienteREST.getListaDealer(ClienteREST.java:31)
09-03 15:47:12.921:
E/NGVL(658): at br.com.cactus.app.Admin$2.onClick(Admin.java:61)
09-03 15:47:12.921:
E/NGVL(658): at android.view.View.performClick(View.java:4084)
09-03 15:47:12.921:
E/NGVL(658): at android.view.View$PerformClick.run(View.java:16966)
09-03 15:47:12.921:
E/NGVL(658): at android.os.Handler.handleCallback(Handler.java:615)
09-03 15:47:12.921:
E/NGVL(658): at android.os.Handler.dispatchMessage(Handler.java:92)
09-03 15:47:12.921:
E/NGVL(658): at android.os.Looper.loop(Looper.java:137)
09-03 15:47:12.921:
E/NGVL(658): at android.app.ActivityThread.main(ActivityThread.java:4745)
09-03 15:47:12.921:
E/NGVL(658): at java.lang.reflect.Method.invokeNative(Native Method)
09-03 15:47:12.921:
E/NGVL(658): at java.lang.reflect.Method.invoke(Method.java:511)
09-03 15:47:12.921:
E/NGVL(658): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
09-03 15:47:12.921:
E/NGVL(658): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
09-03 15:47:12.921:
E/NGVL(658): at dalvik.system.NativeStart.main(Native Method)


MEU CÓDIGO:
WebServiceCliente
package br.com.cactus.webservice;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;

import android.util.Log;

public class WebServiceCliente {

public final String[] get(String url) {

String[] result = new String[2];
HttpGet httpget = new HttpGet(url);
HttpResponse response;

try {
response = HttpClientSingleton.getHttpClientInstace().execute(httpget);
HttpEntity entity = response.getEntity();

if (entity != null) {
result[0] = String.valueOf(response.getStatusLine().getStatusCode());
InputStream instream = entity.getContent();
result[1] = toString(instream);
instream.close();
Log.i("get", "Result from post JsonPost : " + result[0] + " : " + result[1]);
}
} catch (Exception e) {
Log.e("NGVL", "Falha ao acessar Web service", e);
result[0] = "0";
result[1] = "Falha de rede!";
}
return result;
}

public final String[] post(String url, String json) {
String[] result = new String[2];
try {

HttpPost httpPost = new HttpPost(new URI(url));
httpPost.setHeader("Content-type", "application/json");
StringEntity sEntity = new StringEntity(json, "UTF-8");
httpPost.setEntity(sEntity);

HttpResponse response;
response = HttpClientSingleton.getHttpClientInstace().execute(httpPost);
HttpEntity entity = response.getEntity();

if (entity != null) {
result[0] = String.valueOf(response.getStatusLine().getStatusCode());
InputStream instream = entity.getContent();
result[1] = toString(instream);
instream.close();
Log.d("post", "Result from post JsonPost : " + result[0] + " : " + result[1]);
}

} catch (Exception e) {
Log.e("NGVL", "Falha ao acessar Web service", e);
result[0] = "0";
result[1] = "Falha de rede!";
}
return result;
}

private String toString(InputStream is) throws IOException {

byte[] bytes = new byte[1024];
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int lidos;
while ((lidos = is.read(bytes)) > 0) {
baos.write(bytes, 0, lidos);
}
return new String(baos.toByteArray());
}
}


HttpClientSingleton
package br.com.cactus.webservice;

import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;

public class HttpClientSingleton {

private static final int JSON_CONNECTION_TIMEOUT = 3000;
private static final int JSON_SOCKET_TIMEOUT = 5000;
private static HttpClientSingleton instance;
private HttpParams httpParameters;
private DefaultHttpClient httpclient;

private void setTimeOut(HttpParams params) {
HttpConnectionParams.setConnectionTimeout(params,
JSON_CONNECTION_TIMEOUT);
HttpConnectionParams.setSoTimeout(params, JSON_SOCKET_TIMEOUT);
}

private HttpClientSingleton() {
httpParameters = new BasicHttpParams();
setTimeOut(httpParameters);
httpclient = new DefaultHttpClient(httpParameters);
}

public static DefaultHttpClient getHttpClientInstace() {
if (instance == null)
instance = new HttpClientSingleton();
return instance.httpclient;
}
}

ClienteREST
package br.com.cactus.webservice;

import java.util.ArrayList;
import java.util.List;

import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonParser;

import br.com.cactus.model.Dealer;

public class ClienteREST {

private static final String URL_WS = "http://10.0.2.2:8080/WebServiceREST/dealer/"; //"http://10.0.2.2:8080/WebServiceREST/cliente/"

public Dealer getDealer(int id) throws Exception {

String[] resposta = new WebServiceCliente().get(URL_WS + id);

if (resposta[0].equals("200")) {
Gson gson = new Gson();
Dealer dealer = gson.fromJson(resposta[1], Dealer.class);
return dealer;
} else {
throw new Exception(resposta[1]);
}
}

public List<Dealer> getListaDealer() throws Exception {

String[] resposta = new WebServiceCliente().get(URL_WS + "buscarTodosGSON");
// String[] resposta = new WebServiceCliente().get(URL_WS + "buscarTodos");

if (resposta[0].equals("200")) {
Gson gson = new Gson();
ArrayList<Dealer> listaDealer = new ArrayList<Dealer>();
JsonParser parser = new JsonParser();
JsonArray array = parser.parse(resposta[1]).getAsJsonArray();

for (int i = 0; i < array.size(); i++) {
listaDealer.add(gson.fromJson(array.get(i), Dealer.class));
}
return listaDealer;
} else {
throw new Exception(resposta[1]);
}
}

public String inserirDealer(Dealer dealer) throws Exception {

Gson gson = new Gson();
String dealerJSON = gson.toJson(dealer);
String[] resposta = new WebServiceCliente().post(URL_WS + "inserir", dealerJSON);
if (resposta[0].equals("200")) {
return resposta[1];
} else {
throw new Exception(resposta[1]);
}
}

public String deletarDealer(int id) {
String[] resposta = new WebServiceCliente().get(URL_WS + "delete/" + id);
return resposta[1];
}
}


03 Set 2014, 14:56
Perfil
Google employee
Google employee
Avatar de usuário

Data de registro: 05 Abr 2011, 04:47
Mensagens: 1968
Localização: Rio de Janeiro
Mensagem Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Silvio,

Desculpe-me pela demora, mas caso ainda não tenha conseguido resolver, segue a solução.

A partir da versão 3.x o Google "recomenda" que o acesso a internet deva ser feito fora da main thread, em uma outra thread.

Esse problema é bastante conhecido entre desenvolvedores android.

No nosso fórum tem bastante material sobre o assunto.

search.php?keywords=NetworkOnMainThreadException&terms=all&author=antunes&fid%5B%5D=1&sc=1&sf=all&sk=t&sd=d&sr=posts&st=0&ch=300&t=0&submit=Busca

viewtopic.php?f=7&t=17638&p=148894&hilit=Main+Thread#p148894
viewtopic.php?f=2&t=22733&p=151548&hilit=NetworkOnMainThreadException#p151548

Abraços!

silviobarretto escreveu:
Olá Antunes,
Criei o projeto com algumas alterações para adaptar ao meu projeto, estou usando um banco msyql. O meu webservice, está funcionando perfeitamente, retornando o json o banco. Mas qdo vou rodar pelo emulador dá erro "Falha na rede" e falha ao acessar o web service como abaixo:

09-03 15:47:12.921:
E/NGVL(658): Falha ao acessar Web service
09-03 15:47:12.921:
E/NGVL(658): android.os.NetworkOnMainThreadException
09-03 15:47:12.921:
E/NGVL(658): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117)
09-03 15:47:12.921:
E/NGVL(658): at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
09-03 15:47:12.921:
E/NGVL(658): at libcore.io.IoBridge.connectErrno(IoBridge.java:144)
09-03 15:47:12.921:
E/NGVL(658): at libcore.io.IoBridge.connect(IoBridge.java:112)
09-03 15:47:12.921:
E/NGVL(658): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
09-03 15:47:12.921:
E/NGVL(658): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
09-03 15:47:12.921:
E/NGVL(658): at java.net.Socket.connect(Socket.java:842)
09-03 15:47:12.921:
E/NGVL(658): at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119)
09-03 15:47:12.921:
E/NGVL(658): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144)
09-03 15:47:12.921:
E/NGVL(658): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
09-03 15:47:12.921:
E/NGVL(658): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
09-03 15:47:12.921:
E/NGVL(658): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
09-03 15:47:12.921:
E/NGVL(658): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
09-03 15:47:12.921:
E/NGVL(658): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
09-03 15:47:12.921:
E/NGVL(658): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
09-03 15:47:12.921:
E/NGVL(658): at br.com.cactus.webservice.WebServiceCliente.get(WebServiceCliente.java:25)
09-03 15:47:12.921:
E/NGVL(658): at br.com.cactus.webservice.ClienteREST.getListaDealer(ClienteREST.java:31)
09-03 15:47:12.921:
E/NGVL(658): at br.com.cactus.app.Admin$2.onClick(Admin.java:61)
09-03 15:47:12.921:
E/NGVL(658): at android.view.View.performClick(View.java:4084)
09-03 15:47:12.921:
E/NGVL(658): at android.view.View$PerformClick.run(View.java:16966)
09-03 15:47:12.921:
E/NGVL(658): at android.os.Handler.handleCallback(Handler.java:615)
09-03 15:47:12.921:
E/NGVL(658): at android.os.Handler.dispatchMessage(Handler.java:92)
09-03 15:47:12.921:
E/NGVL(658): at android.os.Looper.loop(Looper.java:137)
09-03 15:47:12.921:
E/NGVL(658): at android.app.ActivityThread.main(ActivityThread.java:4745)
09-03 15:47:12.921:
E/NGVL(658): at java.lang.reflect.Method.invokeNative(Native Method)
09-03 15:47:12.921:
E/NGVL(658): at java.lang.reflect.Method.invoke(Method.java:511)
09-03 15:47:12.921:
E/NGVL(658): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
09-03 15:47:12.921:
E/NGVL(658): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
09-03 15:47:12.921:
E/NGVL(658): at dalvik.system.NativeStart.main(Native Method)


MEU CÓDIGO:
WebServiceCliente
package br.com.cactus.webservice;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;

import android.util.Log;

public class WebServiceCliente {

public final String[] get(String url) {

String[] result = new String[2];
HttpGet httpget = new HttpGet(url);
HttpResponse response;

try {
response = HttpClientSingleton.getHttpClientInstace().execute(httpget);
HttpEntity entity = response.getEntity();

if (entity != null) {
result[0] = String.valueOf(response.getStatusLine().getStatusCode());
InputStream instream = entity.getContent();
result[1] = toString(instream);
instream.close();
Log.i("get", "Result from post JsonPost : " + result[0] + " : " + result[1]);
}
} catch (Exception e) {
Log.e("NGVL", "Falha ao acessar Web service", e);
result[0] = "0";
result[1] = "Falha de rede!";
}
return result;
}

public final String[] post(String url, String json) {
String[] result = new String[2];
try {

HttpPost httpPost = new HttpPost(new URI(url));
httpPost.setHeader("Content-type", "application/json");
StringEntity sEntity = new StringEntity(json, "UTF-8");
httpPost.setEntity(sEntity);

HttpResponse response;
response = HttpClientSingleton.getHttpClientInstace().execute(httpPost);
HttpEntity entity = response.getEntity();

if (entity != null) {
result[0] = String.valueOf(response.getStatusLine().getStatusCode());
InputStream instream = entity.getContent();
result[1] = toString(instream);
instream.close();
Log.d("post", "Result from post JsonPost : " + result[0] + " : " + result[1]);
}

} catch (Exception e) {
Log.e("NGVL", "Falha ao acessar Web service", e);
result[0] = "0";
result[1] = "Falha de rede!";
}
return result;
}

private String toString(InputStream is) throws IOException {

byte[] bytes = new byte[1024];
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int lidos;
while ((lidos = is.read(bytes)) > 0) {
baos.write(bytes, 0, lidos);
}
return new String(baos.toByteArray());
}
}


HttpClientSingleton
package br.com.cactus.webservice;

import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;

public class HttpClientSingleton {

private static final int JSON_CONNECTION_TIMEOUT = 3000;
private static final int JSON_SOCKET_TIMEOUT = 5000;
private static HttpClientSingleton instance;
private HttpParams httpParameters;
private DefaultHttpClient httpclient;

private void setTimeOut(HttpParams params) {
HttpConnectionParams.setConnectionTimeout(params,
JSON_CONNECTION_TIMEOUT);
HttpConnectionParams.setSoTimeout(params, JSON_SOCKET_TIMEOUT);
}

private HttpClientSingleton() {
httpParameters = new BasicHttpParams();
setTimeOut(httpParameters);
httpclient = new DefaultHttpClient(httpParameters);
}

public static DefaultHttpClient getHttpClientInstace() {
if (instance == null)
instance = new HttpClientSingleton();
return instance.httpclient;
}
}

ClienteREST
package br.com.cactus.webservice;

import java.util.ArrayList;
import java.util.List;

import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonParser;

import br.com.cactus.model.Dealer;

public class ClienteREST {

private static final String URL_WS = "http://10.0.2.2:8080/WebServiceREST/dealer/"; //"http://10.0.2.2:8080/WebServiceREST/cliente/"

public Dealer getDealer(int id) throws Exception {

String[] resposta = new WebServiceCliente().get(URL_WS + id);

if (resposta[0].equals("200")) {
Gson gson = new Gson();
Dealer dealer = gson.fromJson(resposta[1], Dealer.class);
return dealer;
} else {
throw new Exception(resposta[1]);
}
}

public List<Dealer> getListaDealer() throws Exception {

String[] resposta = new WebServiceCliente().get(URL_WS + "buscarTodosGSON");
// String[] resposta = new WebServiceCliente().get(URL_WS + "buscarTodos");

if (resposta[0].equals("200")) {
Gson gson = new Gson();
ArrayList<Dealer> listaDealer = new ArrayList<Dealer>();
JsonParser parser = new JsonParser();
JsonArray array = parser.parse(resposta[1]).getAsJsonArray();

for (int i = 0; i < array.size(); i++) {
listaDealer.add(gson.fromJson(array.get(i), Dealer.class));
}
return listaDealer;
} else {
throw new Exception(resposta[1]);
}
}

public String inserirDealer(Dealer dealer) throws Exception {

Gson gson = new Gson();
String dealerJSON = gson.toJson(dealer);
String[] resposta = new WebServiceCliente().post(URL_WS + "inserir", dealerJSON);
if (resposta[0].equals("200")) {
return resposta[1];
} else {
throw new Exception(resposta[1]);
}
}

public String deletarDealer(int id) {
String[] resposta = new WebServiceCliente().get(URL_WS + "delete/" + id);
return resposta[1];
}
}

_________________
Alexandre Antunes
@a3b @bemobi
Moto X

App@Bemobi: Apps Club - Loja de Apps baseada em assinatura que dá direito a usar ~400 Apps.

Campanha: Facilite sua vida e a dos outros usuários.
Objetivo: Vamos colocar a tag [RESOLVIDO] no título do tópico quando o problema for resolvido.


Use a ferramenta de busca do fórum e não espere tanto para que a sua dúvida seja respondida!

Quer trabalhar comigo??


22 Out 2014, 14:49
Perfil WWW
What is Android?
What is Android?

Data de registro: 27 Out 2014, 13:49
Mensagens: 2
Mensagem Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Olá, fiz o webservice em um projeto distinto do projeto android, e ao fazer o teste de inserção ele me traz um erro de NoClassDefFoundException quando crio uma instância da classe model dentro da activity... Como vc fez a importação de um projeto no outro??? Já tentei pelo Project References e até criei um JAR com o projeto do WebService e importei no projeto android, ele importa a classe normal mas me apresenta esse erro na linha de código referente à instancia da classe model...


27 Out 2014, 13:56
Perfil
Google employee
Google employee
Avatar de usuário

Data de registro: 05 Abr 2011, 04:47
Mensagens: 1968
Localização: Rio de Janeiro
Mensagem Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Eu simplesmente copiei as classes de um projeto para o outro!!

alexprado escreveu:
Olá, fiz o webservice em um projeto distinto do projeto android, e ao fazer o teste de inserção ele me traz um erro de NoClassDefFoundException quando crio uma instância da classe model dentro da activity... Como vc fez a importação de um projeto no outro??? Já tentei pelo Project References e até criei um JAR com o projeto do WebService e importei no projeto android, ele importa a classe normal mas me apresenta esse erro na linha de código referente à instancia da classe model...

_________________
Alexandre Antunes
@a3b @bemobi
Moto X

App@Bemobi: Apps Club - Loja de Apps baseada em assinatura que dá direito a usar ~400 Apps.

Campanha: Facilite sua vida e a dos outros usuários.
Objetivo: Vamos colocar a tag [RESOLVIDO] no título do tópico quando o problema for resolvido.


Use a ferramenta de busca do fórum e não espere tanto para que a sua dúvida seja respondida!

Quer trabalhar comigo??


30 Out 2014, 15:40
Perfil WWW
What is Android?
What is Android?

Data de registro: 27 Out 2014, 13:49
Mensagens: 2
Mensagem Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Nesse Caso vc então copiou apenas as necessárias, certo??? A parte WebService ainda dependerá da execução do outro projeto...

antunes escreveu:
Eu simplesmente copiei as classes de um projeto para o outro!!

alexprado escreveu:
Olá, fiz o webservice em um projeto distinto do projeto android, e ao fazer o teste de inserção ele me traz um erro de NoClassDefFoundException quando crio uma instância da classe model dentro da activity... Como vc fez a importação de um projeto no outro??? Já tentei pelo Project References e até criei um JAR com o projeto do WebService e importei no projeto android, ele importa a classe normal mas me apresenta esse erro na linha de código referente à instancia da classe model...


30 Out 2014, 16:14
Perfil
Google employee
Google employee
Avatar de usuário

Data de registro: 05 Abr 2011, 04:47
Mensagens: 1968
Localização: Rio de Janeiro
Mensagem Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Isso, copiei apenas os POJOs.

Abraços!

alexprado escreveu:
Nesse Caso vc então copiou apenas as necessárias, certo??? A parte WebService ainda dependerá da execução do outro projeto...

antunes escreveu:
Eu simplesmente copiei as classes de um projeto para o outro!!

alexprado escreveu:
Olá, fiz o webservice em um projeto distinto do projeto android, e ao fazer o teste de inserção ele me traz um erro de NoClassDefFoundException quando crio uma instância da classe model dentro da activity... Como vc fez a importação de um projeto no outro??? Já tentei pelo Project References e até criei um JAR com o projeto do WebService e importei no projeto android, ele importa a classe normal mas me apresenta esse erro na linha de código referente à instancia da classe model...

_________________
Alexandre Antunes
@a3b @bemobi
Moto X

App@Bemobi: Apps Club - Loja de Apps baseada em assinatura que dá direito a usar ~400 Apps.

Campanha: Facilite sua vida e a dos outros usuários.
Objetivo: Vamos colocar a tag [RESOLVIDO] no título do tópico quando o problema for resolvido.


Use a ferramenta de busca do fórum e não espere tanto para que a sua dúvida seja respondida!

Quer trabalhar comigo??


07 Nov 2014, 11:47
Perfil WWW
What is a Activity?
What is a Activity?

Data de registro: 20 Mai 2015, 17:43
Mensagens: 12
Mensagem Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Estou seguindo o tutorial, mas estou com o seguinte erro:

java.lang.IllegalStateException: This is not a JSON Array.

Mas o web service está retornando Json corretamente...
Se puder me dar uma ajuda, agradeço.


01 Jun 2015, 21:17
Perfil
What is Android?
What is Android?

Data de registro: 30 Jul 2015, 16:06
Mensagens: 2
Mensagem Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Boa tarde Antunes,

Primeiramente gostaria de te parabenizar pelo artigo, além de ser um ótimo tutorial, ele também é explicativo quanto as tecnologias aplicadas.

Eu implementei o seu exemplo e ele funcionou corretamente, exceto nos métodos de busca e exclusão, onde o cliente android envia parâmetros ao servidor.

Está dando o seguinte erro no servidor:

GRAVE: A message body reader for Java class int, and Java type int, and MIME media type application/octet-stream was not found.
The registered message body readers compatible with the MIME media type are:
application/octet-stream ->
com.sun.jersey.core.impl.provider.entity.ByteArrayProvider
com.sun.jersey.core.impl.provider.entity.FileProvider
com.sun.jersey.core.impl.provider.entity.InputStreamProvider
com.sun.jersey.core.impl.provider.entity.DataSourceProvider
com.sun.jersey.core.impl.provider.entity.RenderedImageProvider
*/* ->
com.sun.jersey.core.impl.provider.entity.FormProvider
com.sun.jersey.core.impl.provider.entity.StringProvider
com.sun.jersey.core.impl.provider.entity.ByteArrayProvider
com.sun.jersey.core.impl.provider.entity.FileProvider
com.sun.jersey.core.impl.provider.entity.InputStreamProvider
com.sun.jersey.core.impl.provider.entity.DataSourceProvider
com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General
com.sun.jersey.core.impl.provider.entity.ReaderProvider
com.sun.jersey.core.impl.provider.entity.DocumentProvider
com.sun.jersey.core.impl.provider.entity.SourceProvider$StreamSourceReader
com.sun.jersey.core.impl.provider.entity.SourceProvider$SAXSourceReader
com.sun.jersey.core.impl.provider.entity.SourceProvider$DOMSourceReader
com.sun.jersey.json.impl.provider.entity.JSONJAXBElementProvider$General
com.sun.jersey.json.impl.provider.entity.JSONArrayProvider$General
com.sun.jersey.json.impl.provider.entity.JSONObjectProvider$General
com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General
com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General
com.sun.jersey.core.impl.provider.entity.XMLRootObjectProvider$General
com.sun.jersey.core.impl.provider.entity.EntityHolderReader
com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider$General
com.sun.jersey.json.impl.provider.entity.JSONListElementProvider$General
com.sun.jersey.json.impl.provider.entity.JacksonProviderProxy



Segue o método onde recebo a chamada REST no servidor:

@GET
    @Path("/excluir/{id}")
    @Produces("application/json")
    public String excluir(@PathParam("id") int id) throws DAOException{
       
        //int idNew = Integer.parseInt(id);
        localDao = new LocalDAO();
       
        return localDao.excluir(id);
    }


Segue a classe android onde faço a chamada REST:

public String excluirLocal(int id) {
       
        String[] resposta = new WebServiceCliente().get(WebServiceConfig.URL_WS + "local/excluir/" + id);
        return resposta[1];
       
    }


Apenas alterei um pouco a forma de construir a URL, porém garanto que a URL passada está correta!

As classes WebServiceCliente e HttpClientSingleton estão exatamente como em seu exemplo! Eu acredito que o problema seja na leitura do "id" do tipo inteiro no lado do servidor ou na forma como esse id é passado. Sei que a anotação @PathParam deveria "saber" que existe um atributo sendo passado como parâmetro e deveria ler o parâmetro corretamente no servidor, porém acho que não está funcionamento corretamente.

Que outra forma eu poderia fazer esta passagem de parâmetro?


30 Jul 2015, 16:35
Perfil
What is Android?
What is Android?

Data de registro: 30 Jul 2015, 16:06
Mensagens: 2
Mensagem Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Só dando segmento a pergunta anterior, alterando o método para:

@GET
    @Path("/excluir")
    @Produces("application/json")
    public String excluir(@QueryParam("id") int id) throws DAOException{
       
        ...
    }


E passando o ID pela url da seguinte forma: http://......../local?id=id

Ele funciona, porém eu não gostaria de utilizar desta forma, gostaria de utilizar o @PathParam, alguém sabe o pq daquele comportamento???


30 Jul 2015, 20:53
Perfil
Mostrar mensagens anteriores:  Organizar por  
Responder Tópico   [ 271 Mensagens ]  Ir para a página Anterior  1, 2, 3, 4, 5, 6

Quem está online

Usuários vendo este fórum: Abraao, adolfo, alberto, albinoneto, alex, amarildolacerdas, augustomig, bernardodauer, BiG_SerGiO, Blackstorm, BloggerCaOS, bocajunior88, brcamp, brpiassa, Bruto_JPO, Carmizini, cesao, Cleiton, cleiton_maciel, Clone Trooper, d.paim, danielbfranco, dchechetto, denisfln, Diego Rufino, difrene, Dorpho, DroidBot, emersonbarros, erikopa, fabrizior, Faroli, Flávio Robertgo, fracon, free_w3000, furlanrapha, gabrielatme, grandebaro, Gui Pereira, guilhermesmo, gustavo, HAMSES, helder, icarodavi, ICCrawler - ICjobs, Ielo8, Igor_M, ismaels, ismavolk, itsN, jacard, jairom, jcdeveloper, jhou, Josinhaz, Jota, julianafsa, juliaojunior, juliomar, jzaires, Ki-Adi-Mundi, Knut, lafamac, leoadias, Lucious, luizcarlosvb, Maiquell, mapis, Marcelo, masf_33, mateusff, mayahaslinger, Microdesk, mlemos, neviim, nfaria, nivaldo, nivea, onedroid, Padawan, paulanegreiros, pxcx, rafaelvital, ramonrabello, ramonsa, ricardo, rixargolo, roberto caceres, RodReis, rodrigo_mg, rodrigosalfer, ROGÉRIO RODRIGUES, rosano, Rufino, scattonevi, ScoobyGB, SEO Crawler, SidneiCP, talves, tChAnDy, thanaptos, thosjanas, tiago, tiagocomerio, tiagocordeiro, tnarnold, ubiratan, vandob, vilmartr, voliverio, W3 [Sitesearch], wagner_francisco, weber, Webnet, wilsond, woyzeck, Wryel, xa:=zin, Yuri e 0 visitantes


Você não pode criar novos tópicos neste fórum
Você não pode responder tópicos neste fórum
Você não pode editar suas mensagens neste fórum
Você não pode excluir suas mensagens neste fórum
Você não pode enviar anexos neste fórum

Procurar por:

© 2007 - 2016 Portal Android - Comunidade de Desenvolvedores Android

Estamos no Linkedin    Siga-nos no twitter


Powered by phpBB - Hospedado por Bemobi