[Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Autor |
Mensagem |
antunes
Google employee
Data de registro: 05 Abr 2011, 04:47 Mensagens: 1968 Localização: Rio de Janeiro
|
 [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Pessoal, Agora que já aprendemos como criar o nosso WS em Java, vamos para o segundo passo, que é como consumir no Android. [Artigo] Web Service RESTful [+Java+JSON+Code]Como consumir um Web Service pelo AndroidNão vou entrar em detalhes de como cria um projeto Android pois já sabemos como fazer isso, e se não soubermos, o que não falta é tutorial aqui no fórum explicando sobre o assunto. Premissas:* Ter instalado o SDK Android, AVD e o Eclipse (pode ser qualquer versão, mas de preferência a última); * Ter o ambiente configurado, com pelo menos o Hello World Android rodando; * Para esse projeto foi usada a API Google 2.1, Level 7 (como o projeto não tem ligação direta com a API, pode ser qualquer API que deve funcionar). Com o nosso projeto criado, que chamei de ExConsumirWS, podemos ir direto ao código. Antes de entrar em activities e layouts, que não é o foco desse artigo, vamos começar pelo nosso WS cliente. Esse, ficará responsável pelo envio e recebimento das mensagens HTTP, ou seja, será a porta de entrada e saída da nossa aplicação para comunicação com o Web Service. Não podemos esquecer de importar a API google-gson para esse projeto também, que serve para converter objetos java em JSON e vice-versa. Para adicionar bibliotecas ao seu projeto android, basta criar o diretório "libs" na raiz do seu projeto e colocar os JARs dentro dela. Primeiro de tudo vamos precisar ter, exatamente, a mesma entidade (bean) que usamos no WS, já que nossa api (Jersey e GSON) usam essa estrutura para gerar o JSON e vice-versa, voltar ao objeto. Para isso, criei a classe Cliente dentro do pacote “br.com.exemplo.model”. Na verdade eu apenas copiei do projeto do WS e colei dentro desse diretório, pelo Eclipse mesmo, retirando a tag “@XmlRootElement” que não vamos precisar dela nesse projeto. Dica: Esse pacote model, seria ideal se fosse um .jar, gerado de um terceiro projeto, que você importaria nos dois projetos, assim, garantindo que os seus objetos sejam exatamente iguais. Tenho certeza que vocês repararam no “implements Serializable” na classe “Cliente”, mas comentarei sobre isso mais adiante. Para o nosso WS cliente, precisaremos de um objeto "HttpClient" sendo chamado em cada transação com o WS, logo, para não perder o controle de quantos estão em memória, criei um singletom para garantir apenas uma instância. package br.com.exemplo.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; } }
Depois disso, vamos criar efetivamente a classe WebServiceCliente, que ficará responsável pelos “GET’s”, “POST’s”, “PUT’s” e “DELETE’s”, e será nossa interface com o WS. Ele pode ser único para a sua aplicação, já que raramente esses métodos serão diferentes, então não faz sentido ter um para cada objeto (Cliente, Pedido, Item de Pedido e etc). Nessa classe, eu implementei apenas o GET e o POST, mas vocês podes especializar, criando o PUT, para atualização de um registro, e o DELETE, para apagar um registro. O que mudaria é que teríamos 4 métodos nessa classe, um para cada um desses. Reparem que usamos o objeto “HttpGet” para o GET e o “HttpPost” para o POST, se vocês forem utilizar os outros métodos, usem o “HttpDelete” para o DELETE e o “HttpPut” para o PUT. Atenção: Se decidirem usar esses métodos, não se esqueçam de colocar as anotações “@DELETE” e “@PUT” nos métodos correspondentes lá no Web Service. Senão você vai dar um DELETE em um método GET e não vai funcionar. Lembrem-se que esses métodos correspondem aos métodos do protocolo HTTP.package br. com. exemplo. 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()); }} Levamos sempre em conta o grau de responsabilidade de uma classe. Ela nunca deve ter muitas funções ou fazer mais do que o necessário, nem ser muito grande, assim as boas práticas recomendam. Por isso essa quantidade de classes, que vocês devem estar se perguntando - Por que esse cara cria tanta classe?? - Agora está respondido. Agora vem a classe que vai fazer o meio de campo entre o nosso “WebServiceCliente” e a Activity. package br. com. exemplo. webservice; import java. util. ArrayList; import java. util. List; import br. com. exemplo. model. Cliente; import com. google. gson. Gson; import com. google. gson. JsonArray; import com. google. gson. JsonParser; public class ClienteREST { private static final String URL_WS = "http://10.0.2.2:8080/WebServiceREST/cliente/"; public Cliente getCliente (int id ) throws Exception { String[] resposta = new WebServiceCliente (). get(URL_WS + id ); if (resposta [0]. equals("200")) { Gson gson = new Gson (); Cliente cliente = gson. fromJson(resposta [1], Cliente. class); return cliente; } else { throw new Exception(resposta [1]); } } public List<Cliente> getListaCliente () 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<Cliente> listaCliente = new ArrayList<Cliente> (); JsonParser parser = new JsonParser (); JsonArray array = parser. parse(resposta [1]). getAsJsonArray(); for (int i = 0; i < array. size(); i++ ) { listaCliente. add(gson. fromJson(array. get(i ), Cliente. class)); } return listaCliente; } else { throw new Exception(resposta [1]); } } public String inserirCliente (Cliente cliente ) throws Exception { Gson gson = new Gson (); String clienteJSON = gson. toJson(cliente ); String[] resposta = new WebServiceCliente (). post(URL_WS + "inserir", clienteJSON ); if (resposta [0]. equals("200")) { return resposta [1]; } else { throw new Exception(resposta [1]); } } public String deletarCliente (int id ) { String[] resposta = new WebServiceCliente (). get(URL_WS + "delete/" + id ); return resposta [1]; }} Primeira observação dessa classe é em relação a essa linha, que está comentada: String[] resposta = new WebServiceCliente (). get(URL_WS + "buscarTodos"); O que acontece com ela é o seguinte. Lembra os métodos que devolvem uma lista lá na classe “ClienteResource no nosso WS?? Para refrescar a memória: … @GET @Path ("/buscarTodos") @Produces ("application/json") public ArrayList<Cliente> selTodos (){ return Banco. getBancoInstance(). getListaClientes(); } @GET @Path ("/buscarTodosGSON") @Produces ("application/json") public String selTodosGSON (){ return new Gson (). toJson(Banco. getBancoInstance(). getListaClientes()); }… Lá eu falei que entenderiamos isso aqui nesse artigo. O que acontece é que a forma com que o Jersey transforma uma lista (List) em JSON é diferente da forma com que o GSON faz isso. Então, por esse motivo que usamos o GSON no WS, para que a gente consiga receber essa lista aqui no Android. Deixei esses cometários e o método no WS para que vocês testem e vejam com os seus próprios olhos. Oportunidade de estudo para vocês: Achar uma forma de enviar uma lista, para que não presise usar o GSON no WS. Eu não achei, mas eu não tinha muito tempo para perder com isso e como a lib GSON é tão peguena, nem me preocupei mais. Outra coisa interessante que usei nesse método foi o “Exception” a meu favor. Ele vai devolver a mensagem de erro que vem do WS e lá na Activity, com o uso do try/catch, pego essa mensagem e jogo no Toast. Agora voltando ao nosso projeto, vamos colocar isso tudo pra funcionar e ver o resultados em activities. Falando em Android, a informação mais importante que precisamos saber é sobre permissão. Para consumo de WS, precisamos apenas da permissão para INTERNET. Sabendo disso, olhem como ficou o meu manifest. <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="br.com.exemplo" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="7" /> <uses-permission android:name="android.permission.INTERNET"/> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:name=".activity.ExConsumirWSActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".activity.ListaClientes"> </activity> </application>
</manifest>
Dica: As permissões sempre devem vir antes da tag “application”. Chegamos nas Activities. Já aproveito pra avisar que me reservei o direito de não fazer um monte de Activities e facilitar a minha vida. package br. com. exemplo. activity; import java. util. ArrayList; import br. com. exemplo. R; import br. com. exemplo. model. Cliente; import br. com. exemplo. webservice. ClienteREST; import android. app. Activity; import android. content. Intent; import android. os. Bundle; import android. view. View; import android. widget. Button; import android. widget. EditText; import android. widget. TextView; import android. widget. Toast; public class ExConsumirWSActivity extends Activity { 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); buscarIdBtn. setOnClickListener(new View. OnClickListener() { @Override public void onClick (View v ) { id = idEdt. getText(). toString(); ClienteREST cliREST = new ClienteREST (); try { Cliente cliente = cliREST. getCliente(Integer. parseInt(id )); txtView. setText(cliente. toString()); } catch (NumberFormatException e ) { e. printStackTrace(); gerarToast ("Digite um ID válido!"); } catch (Exception e ) { e. printStackTrace(); gerarToast (e. getMessage()); } } }); buscarTodosBtn. setOnClickListener(new View. OnClickListener() { @Override public void onClick (View v ) { ClienteREST cliREST = new ClienteREST (); try { ArrayList<Cliente> listaCliente = (ArrayList<Cliente> ) cliREST. getListaCliente(); Intent i = new Intent (getApplicationContext (), ListaClientes. class); i. putExtra("lista", listaCliente ); startActivity (i ); } catch (Exception e ) { e. printStackTrace(); gerarToast (e. getMessage()); } } }); deletarBtn. setOnClickListener(new View. OnClickListener() { @Override public void onClick (View v ) { id = idEdt. getText(). toString(); ClienteREST cliREST = new ClienteREST (); try { String resposta = cliREST. deletarCliente(Integer. parseInt(id )); txtView. setText(resposta ); } catch (NumberFormatException e ) { e. printStackTrace(); gerarToast ("Digite um ID válido!"); } catch (Exception e ) { e. printStackTrace(); gerarToast (e. getMessage()); } } }); inserirBtn. setOnClickListener(new View. OnClickListener() { @Override public void onClick (View v ) { Cliente cliente = new Cliente (); cliente. setNome("João da Silva"); cliente. setCpf("000333444-01"); cliente. setEndereco("Rua do lado, 33"); //não coloquei o ID, pq isso é papel do banco, com um auto increment. ClienteREST cliREST = new ClienteREST (); try { String resposta = cliREST. inserirCliente(cliente ); txtView. setText(resposta ); } catch (Exception e ) { e. printStackTrace(); gerarToast (e. getMessage()); } } }); } private void gerarToast (CharSequence message ) { int duration = Toast. LENGTH_LONG; Toast toast = Toast . makeText(getApplicationContext (), message, duration ); toast. show(); }} Pego a mensagem da exceção com o “getMessage()” e jogo no Toast. Simples, né?? Agora a lista de clientes. Aqui está a explicação do “Serializable” lá na classe Cliente. Preciso que seja um objeto serializável para passar de uma activity para a outra usando o “putExtra()”, apenas isso. package br. com. exemplo. activity; import java. util. ArrayList; import android. app. ListActivity; import android. os. Bundle; import android. view. View; import android. widget. AdapterView; import android. widget. AdapterView. OnItemClickListener; import android. widget. ArrayAdapter; import android. widget. ListView; import android. widget. TextView; import android. widget. Toast; import br. com. exemplo. R; import br. com. exemplo. model. Cliente; public class ListaClientes extends ListActivity { @Override protected void onCreate (Bundle savedInstanceState ) { // TODO Auto-generated method stub super. onCreate(savedInstanceState ); ArrayList<Cliente> listaClientes = new ArrayList<Cliente> (); if (getIntent (). hasExtra("lista")) { listaClientes = (ArrayList<Cliente> ) getIntent (). getExtras() . getSerializable("lista"); } setListAdapter (new ArrayAdapter<Cliente> (this, R. layout. list_item, listaClientes )); ListView lv = getListView (); lv. setTextFilterEnabled(true); lv. setOnItemClickListener(new OnItemClickListener () { public void onItemClick (AdapterView<?> parent, View view, int position, long id ) { // When clicked, show a toast with the TextView text Toast. makeText(getApplicationContext (), ((TextView ) view ). getText(), Toast. LENGTH_SHORT). show(); } }); }} Agora é só brincar!! Atualização...(10/02/2012)Recebi uma pergunta de um colega do fórum sobre a possibilidade de enviar uma lista ao WS, ao contrário de como já fizemos de consumir uma lista do WS. Para demonstrar como como fazer, abri essa atualização. A tarefa é simples, apenas precisaremos mudar a nossa camada que trata os objetos antes de enviá-los ao WS, começando pelo ClienteRest. Nele eu adicionei apenas esse método, que vai receber a lista de clientes, converter para JSON e enviar, junto com a URL, para o WebServiceCliente, que não foi alterado. public String inserirListaClientes (ArrayList<Cliente> listaClientes ) throws Exception { Gson gson = new Gson (); String clienteJSON = gson. toJson(listaClientes ); String[] resposta = new WebServiceCliente (). post(URL_WS + "inserirLista", clienteJSON ); if (resposta [0]. equals("200")) { return resposta [1]; } else { throw new Exception(resposta [1]); }} Na minha Activity ExConsumirWSActivity, criei um novo botão para criar a lista de clientes e passá-la adiante para a classe que trata com o WS. Button inserirListaBtn = (Button) findViewById (R. id. buttonInserirListaClientes); inserirListaBtn. setOnClickListener(new View. OnClickListener() { @Override public void onClick (View v ) { ArrayList<Cliente> listaClientes = new ArrayList<Cliente> (); Cliente cliente1 = new Cliente (); cliente1. setNome("João da Silva"); cliente1. setCpf("000333444-01"); cliente1. setEndereco("Rua do lado, 33"); listaClientes. add(cliente1 ); Cliente cliente2 = new Cliente (); cliente2. setNome("Marcos Ribeiro"); cliente2. setCpf("777777777-99"); cliente2. setEndereco("Rua de cima, 340"); listaClientes. add(cliente2 ); Cliente cliente3 = new Cliente (); cliente3. setNome("Zezinho do posto"); cliente3. setCpf("999999999-22"); cliente3. setEndereco("Rua de baixo, 66"); listaClientes. add(cliente3 ); //não coloquei o ID, pq isso é papel do banco, com um auto increment. ClienteREST cliREST = new ClienteREST (); try { String resposta = cliREST. inserirListaClientes(listaClientes ); txtView. setText(resposta ); } catch (Exception e ) { e. printStackTrace(); gerarToast (e. getMessage()); } }}); Bom, é isso!! Simples, rápido e muito fácil!!  Abraços!! PS.: Como fiz esse tutorial hoje e não tive tempo de reler algumas vezes, se tiver algum erro, por favor, me avise para que a correção seja feita. Confiram o artigo anterior sobre como criar o WS:[Artigo] Web Service RESTful [+Java+JSON+Code]Não percam o próximo Artigo:[Artigo] Web Service RESTful 3 [+PgSQL+DAO+Business+Factory]
Você não tem permissões suficientes para ver os arquivos anexados nesta mensagem.
_________________Alexandre Antunes @a3b @bemobiMoto 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??
|
10 Fev 2012, 01:09 |
|
 |
pedro
Anatomy of an App
Data de registro: 12 Jan 2008, 22:16 Mensagens: 119
|
 Re: [Artigo] Web Service RESTful 2 [Consumir+Android]
mais um excelente artigo antunes, mais me ajudar um monte. Muito obrigado!!
|
10 Fev 2012, 13:02 |
|
 |
andfmp
What is DDMS?
Data de registro: 30 Ago 2010, 18:00 Mensagens: 34
|
 Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Parabéns pelo artigo Antunes. Excelente mesmo.
_________________APP: Guia Carioca - Guia para o turista que visita o Rio de Janeiro e para o carioca que quer conhecer mais sua cidade.
|
10 Fev 2012, 17:36 |
|
 |
roacutan
What is Android?
Data de registro: 22 Ago 2011, 00:02 Mensagens: 6
|
 Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Valeu cara!!
|
15 Fev 2012, 00:05 |
|
 |
douglas.costa
Anatomy of an App
Data de registro: 30 Dez 2011, 10:10 Mensagens: 131
|
 Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
parabens está me ajudando muito...!!!
|
01 Mar 2012, 17:37 |
|
 |
marquesrodrigo
Hello World!
Data de registro: 08 Out 2011, 22:05 Mensagens: 20
|
 Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Antunes
fiz conforme voce ensina no tutorial mas na minha maquina não esta funcionario..
O Android nao consegue abrir a URL do java. Eu nao instalei o Tomcat não, apenas adicionei o TomCat no eclipse e dou um start no tomcat toda vez que rodo o projeto java.
No java esta tudo legal, mas android nao..
sabe o que pode ser?
Att.,
Rodrigo Marques
|
01 Mar 2012, 19:23 |
|
 |
antunes
Google employee
Data de registro: 05 Abr 2011, 04:47 Mensagens: 1968 Localização: Rio de Janeiro
|
 Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
marquesrodrigo escreveu: Antunes
fiz conforme voce ensina no tutorial mas na minha maquina não esta funcionario..
O Android nao consegue abrir a URL do java. Eu nao instalei o Tomcat não, apenas adicionei o TomCat no eclipse e dou um start no tomcat toda vez que rodo o projeto java.
No java esta tudo legal, mas android nao..
sabe o que pode ser?
Att.,
Rodrigo Marques Vc consegue consumir o seu WS usando o poster?? Como vc está tentando acessar a URL pelo android?? Posta ela aqui!! Abraços!
_________________Alexandre Antunes @a3b @bemobiMoto 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??
|
01 Mar 2012, 20:36 |
|
 |
franckini
What is Android?
Data de registro: 01 Mar 2012, 19:02 Mensagens: 6
|
 Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Olá Antunes, muito bom o seu tutorial! Me ajudou bastante
Mas ainda estou com problemas no layout da classe ListaClientes. Teria como vc disponibilizar esse arquivo (R.layout.list_item) pois estou tentando adivinhar o que tem nesse xml a partir do código-fonte da Classe ListaClientes e não estou obtendo êxito. Fico muito grato se vc puder ajudar.
Abraços
|
01 Mar 2012, 23:49 |
|
 |
antunes
Google employee
Data de registro: 05 Abr 2011, 04:47 Mensagens: 1968 Localização: Rio de Janeiro
|
 Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
franckini escreveu: Olá Antunes, muito bom o seu tutorial! Me ajudou bastante
Mas ainda estou com problemas no layout da classe ListaClientes. Teria como vc disponibilizar esse arquivo (R.layout.list_item) pois estou tentando adivinhar o que tem nesse xml a partir do código-fonte da Classe ListaClientes e não estou obtendo êxito. Fico muito grato se vc puder ajudar.
Abraços franckini, Muito obrigado!! Agora vamos ao seu problema. Esse arquivo está dentro do projeto, que está em anexo no tópico. Vc pode baixar e conferir tudo que eu fiz!! De qualquer forma, o conteúdo do xml é esse aqui: <?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="10dp" android:textSize="16sp" > </TextView> Apenas um TextView!!! Abraços!
_________________Alexandre Antunes @a3b @bemobiMoto 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??
|
02 Mar 2012, 01:49 |
|
 |
andremorgado
What is a Activity?
Data de registro: 19 Fev 2012, 23:39 Mensagens: 15
|
 Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
sera que alguem consegue me ajudar, ao clicar em qualquer um dos botoes no emulador me aparece falha na rede. segue o logcat: 03-27 23:45:34.537: E/NGVL(304): Falha ao acessar Web service 03-27 23:45:34.537: E/NGVL(304): org.apache.http.conn.HttpHostConnectException: Connection to http://localhost:8080 refused 03-27 23:45:34.537: E/NGVL(304): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:133) 03-27 23:45:34.537: E/NGVL(304): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 03-27 23:45:34.537: E/NGVL(304): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 03-27 23:45:34.537: E/NGVL(304): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:348) 03-27 23:45:34.537: E/NGVL(304): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 03-27 23:45:34.537: E/NGVL(304): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 03-27 23:45:34.537: E/NGVL(304): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 03-27 23:45:34.537: E/NGVL(304): at br.com.exemplo.webservice.WebServiceCliente.get(WebServiceCliente.java:26) 03-27 23:45:34.537: E/NGVL(304): at br.com.exemplo.webservice.ClienteREST.getListaCliente(ClienteREST.java:33) 03-27 23:45:34.537: E/NGVL(304): at br.com.exemplo.activity.ExConsumirWSActivity$2.onClick(ExConsumirWSActivity.java:59) 03-27 23:45:34.537: E/NGVL(304): at android.view.View.performClick(View.java:2364) 03-27 23:45:34.537: E/NGVL(304): at android.view.View.onTouchEvent(View.java:4179) 03-27 23:45:34.537: E/NGVL(304): at android.widget.TextView.onTouchEvent(TextView.java:6541) 03-27 23:45:34.537: E/NGVL(304): at android.view.View.dispatchTouchEvent(View.java:3709) 03-27 23:45:34.537: E/NGVL(304): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 03-27 23:45:34.537: E/NGVL(304): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 03-27 23:45:34.537: E/NGVL(304): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 03-27 23:45:34.537: E/NGVL(304): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 03-27 23:45:34.537: E/NGVL(304): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659) 03-27 23:45:34.537: E/NGVL(304): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107) 03-27 23:45:34.537: E/NGVL(304): at android.app.Activity.dispatchTouchEvent(Activity.java:2061) 03-27 23:45:34.537: E/NGVL(304): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643) 03-27 23:45:34.537: E/NGVL(304): at android.view.ViewRoot.handleMessage(ViewRoot.java:1691) 03-27 23:45:34.537: E/NGVL(304): at android.os.Handler.dispatchMessage(Handler.java:99) 03-27 23:45:34.537: E/NGVL(304): at android.os.Looper.loop(Looper.java:123) 03-27 23:45:34.537: E/NGVL(304): at android.app.ActivityThread.main(ActivityThread.java:4363) 03-27 23:45:34.537: E/NGVL(304): at java.lang.reflect.Method.invokeNative(Native Method) 03-27 23:45:34.537: E/NGVL(304): at java.lang.reflect.Method.invoke(Method.java:521) 03-27 23:45:34.537: E/NGVL(304): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 03-27 23:45:34.537: E/NGVL(304): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 03-27 23:45:34.537: E/NGVL(304): at dalvik.system.NativeStart.main(Native Method) 03-27 23:45:34.537: E/NGVL(304): Caused by: java.net.ConnectException: localhost/127.0.0.1:8080 - Connection refused 03-27 23:45:34.537: E/NGVL(304): at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:255) 03-27 23:45:34.537: E/NGVL(304): at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:535) 03-27 23:45:34.537: E/NGVL(304): at java.net.Socket.connect(Socket.java:1054) 03-27 23:45:34.537: E/NGVL(304): at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:117) 03-27 23:45:34.537: E/NGVL(304): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:129) 03-27 23:45:34.537: E/NGVL(304): ... 30 more
|
27 Mar 2012, 22:46 |
|
 |
antunes
Google employee
Data de registro: 05 Abr 2011, 04:47 Mensagens: 1968 Localização: Rio de Janeiro
|
 Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
O erro é esse aqui!!! 03-27 23:45:34.537: E/NGVL(304): org.apache.http.conn.HttpHostConnectException: Connection to http://localhost:8080 refused Não existe o nome localhost para o emulador, ele não sabe traduzir. Vc deve usar o mesmo ip que eu usei, que é o ip que o emulador entende como o ip do seu pc!! http://10.0.2.2:8080O 10.0.2.1 é o ip do seu emulador!! Testa ae que vai funcionar!! Qualquer dúvida é só ler a documentação!! http://developer.android.com/guide/deve ... networkingAbraços!
_________________Alexandre Antunes @a3b @bemobiMoto 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??
|
28 Mar 2012, 03:27 |
|
 |
Marcos_Junior
What is DDMS?
Data de registro: 05 Abr 2012, 12:48 Mensagens: 34
|
 Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
java.lang.NoClassDefFoundError: com.google.gson.Gson
no meu deu esse erro... vc saberia oq aconteceu... estou consumindo em um site feito em PHP.... os dados qndo faço o debug estao vindo pra min...
desde ja Agradeço..
|
05 Abr 2012, 18:39 |
|
 |
Jaison
Developing Applications
Data de registro: 30 Dez 2007, 13:08 Mensagens: 548 Localização: Florianópolis - SC
|
 Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Marcos_Junior escreveu: java.lang.NoClassDefFoundError: com.google.gson.Gson
no meu deu esse erro... vc saberia oq aconteceu... estou consumindo em um site feito em PHP.... os dados qndo faço o debug estao vindo pra min...
desde ja Agradeço.. antunes escreveu: ...Não podemos esquecer de importar a API google-gson ...
_________________GoogleSiga o Portal Android no twitter: @portal_android- Nunca deixe de compartilhar a solução de algum problema; - Críticas, dúvidas ou sugestões relacionadas ao Portal Android? Participe do Portal; - Venda, troca, compra? Classificados; - Faça uma busca antes de postar, sua dúvida já pode ter sido respondida. Mecanismo de busca 1, Mecanismo de busca 2; - Não crie tópicos com títulos tipo "AJUDA URGENTE", "IMPORTANTE", "AJUDA POR FAVOR", "ESTOU DESESPERADO", etc...
|
05 Abr 2012, 23:54 |
|
 |
andremorgado
What is a Activity?
Data de registro: 19 Fev 2012, 23:39 Mensagens: 15
|
 Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
como faço para fazer um get passando um parametro? minha classe webservice esta igual a sua
|
06 Abr 2012, 17:49 |
|
 |
antunes
Google employee
Data de registro: 05 Abr 2011, 04:47 Mensagens: 1968 Localização: Rio de Janeiro
|
 Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
andremorgado escreveu: como faço para fazer um get passando um parametro? minha classe webservice esta igual a sua O parâmetro será passado pela url!! private static final String URL_WS = "http://10.0.2.2:8080/WebServiceREST/cliente/"; public Cliente getCliente (int id ) throws Exception { String[] resposta = new WebServiceCliente (). get(URL_WS + id ); // olha o id aqui, sendo concatenado na url if (resposta [0]. equals("200")) { Gson gson = new Gson (); Cliente cliente = gson. fromJson(resposta [1], Cliente. class); return cliente; } else { throw new Exception(resposta [1]); } } Pode reparar que nesse trecho de código eu passo o id do cliente pela url!! Abraços!
_________________Alexandre Antunes @a3b @bemobiMoto 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 Abr 2012, 21:39 |
|
 |
Marcos_Junior
What is DDMS?
Data de registro: 05 Abr 2012, 12:48 Mensagens: 34
|
 Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
A api esta importada tanto para o projeto com os jar's e dentro da classe
|
09 Abr 2012, 10:14 |
|
 |
antunes
Google employee
Data de registro: 05 Abr 2011, 04:47 Mensagens: 1968 Localização: Rio de Janeiro
|
 Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Marcos_Junior escreveu: A api esta importada tanto para o projeto com os jar's e dentro da classe Posta o seu código, mas acho que vc está passando uma classe que não existe para o GSON. Abraços!
_________________Alexandre Antunes @a3b @bemobiMoto 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??
|
09 Abr 2012, 12:42 |
|
 |
Marcos_Junior
What is DDMS?
Data de registro: 05 Abr 2012, 12:48 Mensagens: 34
|
 Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
O codigo seria o mesmo que esta no tutorial... public Cliente getCliente (int id ) throws Exception { String[] resposta = new WebServiceCliente (). get(URL_WS + id ); if (resposta [0]. equals("200")) { Gson gson = new Gson (); Cliente cliente = gson. fromJson(resposta [1], Cliente. class); return cliente; } else { throw new Exception(resposta [1]); } }
|
09 Abr 2012, 12:46 |
|
 |
antunes
Google employee
Data de registro: 05 Abr 2011, 04:47 Mensagens: 1968 Localização: Rio de Janeiro
|
 Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Mas vc tem a classe cliente no seu projeto??
Essa foi montada pensando nos atributos que são retornados do seu WS, em JSON??
Abraços!
_________________Alexandre Antunes @a3b @bemobiMoto 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??
|
09 Abr 2012, 12:59 |
|
 |
Marcos_Junior
What is DDMS?
Data de registro: 05 Abr 2012, 12:48 Mensagens: 34
|
 Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Sim tenho a classe cliente com apenas dois atributos Id e nome.. so para teste...
|
09 Abr 2012, 13:00 |
|
 |
Marcos_Junior
What is DDMS?
Data de registro: 05 Abr 2012, 12:48 Mensagens: 34
|
 Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Antunes Obrigado pela atenção... descobri o porque do erro! O problema é que .jars externos não são colocados na pasta 'libs' por padrão ao usar Propriedades - Java Build Path-Adicionar JAR externo, e mesmos eu criando a pasta "lib" o android nao o reconhece.. pra ser reconhecido tem q ser "libs" entao automaticamente o jar cai direto no Android dependencies... Obs: errinho besta...
|
09 Abr 2012, 13:11 |
|
 |
Marcos_Junior
What is DDMS?
Data de registro: 05 Abr 2012, 12:48 Mensagens: 34
|
 Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Bom dia...
o meu codigo deu o seguinte erro javax.net.ssl.SSLException: not trusted server certificate exception
dando falha de rede... alguem saberia oq e esse problema...
|
10 Abr 2012, 11:17 |
|
 |
antunes
Google employee
Data de registro: 05 Abr 2011, 04:47 Mensagens: 1968 Localização: Rio de Janeiro
|
 Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Pode ser algum problema na sua URL, na hora de gerar a URI!!
Abraços!
_________________Alexandre Antunes @a3b @bemobiMoto 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??
|
10 Abr 2012, 13:59 |
|
 |
Marcos_Junior
What is DDMS?
Data de registro: 05 Abr 2012, 12:48 Mensagens: 34
|
 Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Boa tarde.... estou usando uma url https...
|
10 Abr 2012, 16:24 |
|
 |
antunes
Google employee
Data de registro: 05 Abr 2011, 04:47 Mensagens: 1968 Localização: Rio de Janeiro
|
 Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Aí está o problema, o meu exemplo não contempla o uso de https.
Vc configurou o seu servidor de aplicação para tal função?? Instalou as libs SSL no servidor??
Talvez a implementação do seu client (android) tenha que ser diferente.
Abraços!
_________________Alexandre Antunes @a3b @bemobiMoto 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??
|
10 Abr 2012, 16:47 |
|
 |
Marcos_Junior
What is DDMS?
Data de registro: 05 Abr 2012, 12:48 Mensagens: 34
|
 Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Sim sim... http://www.jjocenio.com/2011/03/conexao ... coes-java/axei esse link q fala a respeito e estou fazendo o teste pra ver...
|
10 Abr 2012, 16:50 |
|
 |
antunes
Google employee
Data de registro: 05 Abr 2011, 04:47 Mensagens: 1968 Localização: Rio de Janeiro
|
 Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Procurou saber se funciona com o android??
Testou seu WS com o poster ou de alguma outra forma?
Abraços!
_________________Alexandre Antunes @a3b @bemobiMoto 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??
|
10 Abr 2012, 17:59 |
|
 |
Marcos_Junior
What is DDMS?
Data de registro: 05 Abr 2012, 12:48 Mensagens: 34
|
 Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Opa... boas deu tudo certo aqui.... mais precisei de um código a mais pra faze funcionar segue os dois link, caso alguém precise da mesma solução: http://www.jjocenio.com/2011/03/conexao-ssl-em-aplicacoes-java/http://www.guj.com.br/java/12665-connecar-uma-url-via-https-com-autenticcao-em-proxy-de-saidausei também o keyStore Explorer 4.1 pra obter o certificado mais fácil...
|
11 Abr 2012, 11:02 |
|
 |
antunes
Google employee
Data de registro: 05 Abr 2011, 04:47 Mensagens: 1968 Localização: Rio de Janeiro
|
 Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Maravilha!! Muito obrigado pela contribuição!!
Depois farei uma extensão desses artigos usando autenticação e criptografia!!
Abraços!
_________________Alexandre Antunes @a3b @bemobiMoto 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??
|
11 Abr 2012, 14:16 |
|
 |
Normando
What is Android?
Data de registro: 19 Mai 2012, 23:56 Mensagens: 5
|
 Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Opa, alguém pode me dar uma sugestão?
Seguinte, tenho um webservice em .Net, preciso consumir na aplicação android uma lista de objetos, que por sua vez possuem 4 atributos. Preciso também salvar no android um mesmo objeto com seus respectivos atributos para posteriormente enviar para um webservice em .Net. A dúvida seria, qual é o mais apropriado, usar ksoap2-android ou algo com rest? Caso seja com rest, o que seria por exemplo? gson?
|
20 Mai 2012, 00:42 |
|
 |
antunes
Google employee
Data de registro: 05 Abr 2011, 04:47 Mensagens: 1968 Localização: Rio de Janeiro
|
 Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Rapaz, Vc está misturando tudo. Não confunda o padrão do WS com a tecnologia ou linguagem que está usando e não confunda gson com JSON!! GSON é uma api para mapear os seus objetos em JSON. Outra coisa importante é que o cliente sempre depende do servidor, ou seja, se o seu WS for REST, o seu cliente terá que saber se comunicar com ele, sendo assim, a mesma preocupação serve para o ksoap. A linguagem que vc usa para codificar pouco importa, já que a forma de se fazer vai ser sempre a mesma. REST sempre é o mais recomendado quando estamos falando de comunicação com Android. Dê uma lida nesse artigo que vai te ajudar a entender. viewtopic.php?f=7&t=17389Abraços!
_________________Alexandre Antunes @a3b @bemobiMoto 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??
|
20 Mai 2012, 15:03 |
|
 |
Normando
What is Android?
Data de registro: 19 Mai 2012, 23:56 Mensagens: 5
|
 Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Antunes, obrigado pela consideração. Não misturei, acho que me expressei errado. gson eu sei que é uma api para mapeamento Json. Perguntei porque para consumir no android os dados do webservice com ksoap2-android uma array de objetos não era possível, até onde vi, por isto perguntei. Mas sua sugestão de rest foi muito boa. Vou utiliza-la no lugar do plugin ksoap2-android.
[]´s
|
20 Mai 2012, 17:08 |
|
 |
adriano.web
Anatomy of an App
Data de registro: 24 Nov 2011, 15:01 Mensagens: 123 Localização: São Paulo
|
 Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Fala Pessoal blz ?
Antunes vlw pela dica hein
Porém estou com um probleminha nao estou conseguindo retornar o json na lista, ele esta retornar um negocio estranho --> br.com.ExConsumirWS.Cliente@405772e0.
Cada registro que eu tenho cadastrado ele retorno algo tipo esse.
Pode ser o parse de esta dando problema, o estranho é que nao aparece nada no logcat.
Se puder ajudar !!!!
Abraços.
obs: muito bacana o app Guia Carioca Parabéns !!!
|
25 Mai 2012, 18:31 |
|
 |
antunes
Google employee
Data de registro: 05 Abr 2011, 04:47 Mensagens: 1968 Localização: Rio de Janeiro
|
 Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Valeu, muito obrigado!! =D
Posta o seu JSON!! Dá um "sysout" na String com o JSON que vem do WS!!
Outra coisa legal de fazer é usar o Poster para testar o seu WS. Ele é um plugin para o chrome e firefox!!
Abraços!
_________________Alexandre Antunes @a3b @bemobiMoto 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??
|
25 Mai 2012, 23:16 |
|
 |
adriano.web
Anatomy of an App
Data de registro: 24 Nov 2011, 15:01 Mensagens: 123 Localização: São Paulo
|
 Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Esta aqui : public class ClienteREST { private static final String URL_WS = "http://192.168.0.14:8085/BancoDados/cliente/"; public Cliente getCliente (int id ) throws Exception { String[] resposta = new WebServiceCliente (). get(URL_WS + id ); if (resposta [0]. equals("200")) { Gson gson = new Gson (); Cliente cliente = gson. fromJson(resposta [1], Cliente. class); return cliente; } else { throw new Exception(resposta [1]); } } public List<Cliente> getListaCliente () 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<Cliente> listaCliente = new ArrayList<Cliente> (); JsonArray array = new JsonParser (). parse(resposta [1]). getAsJsonArray(); for (int i = 0; i < array. size(); i++ ) { java. lang. reflect. Type collectionType = new TypeToken<List<Cliente>> (){}. getType(); listaCliente. add(gson. fromJson(array. get(i ), Cliente. class)); Log. i("Gson", "passou no json"); } return listaCliente; } else { throw new Exception(resposta [1]); } } Nesse método ele esta vindo mas esta vindo tudo na mesma posicao do array: 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; } Porém estou com um probleminha nao estou conseguindo retornar o json na lista, ele esta retornar um negocio estranho --> br.com.ExConsumirWS.Cliente@405772e0. Fico no aguardo abraços !!!!
|
28 Mai 2012, 11:29 |
|
 |
antunes
Google employee
Data de registro: 05 Abr 2011, 04:47 Mensagens: 1968 Localização: Rio de Janeiro
|
 Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Adriano,
Sua dúvida foi respondida no outro tópico. Por favor, poste sua dúvida em apenas um dos tópicos, pra facilitar a nossa vida. =D
Abraços!
_________________Alexandre Antunes @a3b @bemobiMoto 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??
|
28 Mai 2012, 13:54 |
|
 |
adriano.web
Anatomy of an App
Data de registro: 24 Nov 2011, 15:01 Mensagens: 123 Localização: São Paulo
|
 Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Vlw Antunes Perfeito, e desculpa por replicar a duvida , deu um erro aqui p/ mim, nao conseguia visualizar a minha duvida, quando ia em Ver suas mensagens, será que esta com problema, testa ai pessoal pq 2 pessoas ja falaram do mesmo erro aqui p/ mim !!!
Abraços !!!
|
28 Mai 2012, 16:46 |
|
 |
antunes
Google employee
Data de registro: 05 Abr 2011, 04:47 Mensagens: 1968 Localização: Rio de Janeiro
|
 Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
É que todos os posts dentro dessa parte de Artigos, Tutoriais e Dicas passam por aprovação dos Administradores do fórum. Por isso que não aparece logo que vc posta.
Que bom que resolveu seu problema.
Abraços!
_________________Alexandre Antunes @a3b @bemobiMoto 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??
|
28 Mai 2012, 17:08 |
|
 |
jumas
What is Android?
Data de registro: 29 Mai 2012, 18:31 Mensagens: 1
|
 Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Poxa, aqui está dando erro na hora de imprimir o getListaCliente.. também está voltando código do tipo br.com.ExConsumirWS.Cliente@405772e0. a solução que achei aqui no forum foi mudar o método toString, colocando para retornar o nome, porém gostaria de retornar todos os dados do cliente.. será que tem como?
Desde já, grato.. Abraços
|
01 Jun 2012, 14:43 |
|
 |
antunes
Google employee
Data de registro: 05 Abr 2011, 04:47 Mensagens: 1968 Localização: Rio de Janeiro
|
 Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Sim, fui eu mesmo quem te deu essa sugestão. Se explicar melhor ficaria mais fácil, mas o que vc pode fazer é no retorno do método "toString" concatenar todos os dados que vc quer devolver. Por exemplo: public class Cliente implements Serializable { private int id; private String nome; private String cpf; private String endereco; @Override public String toString () { return "Nome: " + this. nome + "\nCPF: " + this. cpf + "\nEndereço: " + this. endereco; }// getters e setters } Assim vc tem todas as informações com o "\n" como quebra de linha. A outra saída é vc criar um "adapter" customizado recebendo uma lista de objetos e lá dentro setar como quiser em cada linha do seu ListView, por exemplo. Abraços!
_________________Alexandre Antunes @a3b @bemobiMoto 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??
|
01 Jun 2012, 21:31 |
|
 |
funes
Android application
Data de registro: 30 Mai 2012, 01:01 Mensagens: 78
|
 Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Antunes td bem? implementei igual vc ensinou, estou rodando direto no celular atraves de um roteador, esta acontecendo o seguinte quando tento buscar por id
06-07 18:50:17.941: W/System.err(15910): java.lang.NumberFormatException: unable to parse '' as integer 06-07 18:50:17.945: W/System.err(15910): at java.lang.Integer.parseInt(Integer.java:362) 06-07 18:50:17.945: W/System.err(15910): at java.lang.Integer.parseInt(Integer.java:332) 06-07 18:50:17.945: W/System.err(15910): at br.com.exemplo.activity.ExConsumirWSActivity$1.onClick(ExConsumirWSActivity.java:40) 06-07 18:50:17.949: W/System.err(15910): at android.view.View.performClick(View.java:2538) 06-07 18:50:17.949: W/System.err(15910): at android.view.View$PerformClick.run(View.java:9152) 06-07 18:50:17.953: W/System.err(15910): at android.os.Handler.handleCallback(Handler.java:587) 06-07 18:50:17.957: W/System.err(15910): at android.os.Handler.dispatchMessage(Handler.java:92) 06-07 18:50:17.957: W/System.err(15910): at android.os.Looper.loop(Looper.java:123) 06-07 18:50:17.960: W/System.err(15910): at android.app.ActivityThread.main(ActivityThread.java:3687) 06-07 18:50:17.960: W/System.err(15910): at java.lang.reflect.Method.invokeNative(Native Method) 06-07 18:50:17.960: W/System.err(15910): at java.lang.reflect.Method.invoke(Method.java:507) 06-07 18:50:17.960: W/System.err(15910): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842) 06-07 18:50:17.960: W/System.err(15910): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 06-07 18:50:17.964: W/System.err(15910): at dalvik.system.NativeStart.main(Native Method) 06-07 18:50:25.019: E/NGVL(15910): Falha ao acessar Web service 06-07 18:50:25.019: E/NGVL(15910): org.apache.http.conn.ConnectTimeoutException: Connect to /192.168.1.10:8080 timed out 06-07 18:50:25.019: E/NGVL(15910): at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:121) 06-07 18:50:25.019: E/NGVL(15910): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:156) 06-07 18:50:25.019: E/NGVL(15910): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 06-07 18:50:25.019: E/NGVL(15910): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 06-07 18:50:25.019: E/NGVL(15910): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:359) 06-07 18:50:25.019: E/NGVL(15910): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 06-07 18:50:25.019: E/NGVL(15910): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 06-07 18:50:25.019: E/NGVL(15910): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 06-07 18:50:25.019: E/NGVL(15910): at br.com.exemplo.webservice.WebServiceCliente.get(WebServiceCliente.java:24) 06-07 18:50:25.019: E/NGVL(15910): at br.com.exemplo.webservice.ClienteREST.getCliente(ClienteREST.java:16) 06-07 18:50:25.019: E/NGVL(15910): at br.com.exemplo.activity.ExConsumirWSActivity$1.onClick(ExConsumirWSActivity.java:40) 06-07 18:50:25.019: E/NGVL(15910): at android.view.View.performClick(View.java:2538) 06-07 18:50:25.019: E/NGVL(15910): at android.view.View$PerformClick.run(View.java:9152) 06-07 18:50:25.019: E/NGVL(15910): at android.os.Handler.handleCallback(Handler.java:587) 06-07 18:50:25.019: E/NGVL(15910): at android.os.Handler.dispatchMessage(Handler.java:92) 06-07 18:50:25.019: E/NGVL(15910): at android.os.Looper.loop(Looper.java:123) 06-07 18:50:25.019: E/NGVL(15910): at android.app.ActivityThread.main(ActivityThread.java:3687) 06-07 18:50:25.019: E/NGVL(15910): at java.lang.reflect.Method.invokeNative(Native Method) 06-07 18:50:25.019: E/NGVL(15910): at java.lang.reflect.Method.invoke(Method.java:507) 06-07 18:50:25.019: E/NGVL(15910): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842) 06-07 18:50:25.019: E/NGVL(15910): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 06-07 18:50:25.019: E/NGVL(15910): at dalvik.system.NativeStart.main(Native Method) 06-07 18:50:25.023: W/System.err(15910): java.lang.Exception: Falha de rede! 06-07 18:50:25.023: W/System.err(15910): at br.com.exemplo.webservice.ClienteREST.getCliente(ClienteREST.java:23) 06-07 18:50:25.023: W/System.err(15910): at br.com.exemplo.activity.ExConsumirWSActivity$1.onClick(ExConsumirWSActivity.java:40) 06-07 18:50:25.027: W/System.err(15910): at android.view.View.performClick(View.java:2538) 06-07 18:50:25.027: W/System.err(15910): at android.view.View$PerformClick.run(View.java:9152) 06-07 18:50:25.031: W/System.err(15910): at android.os.Handler.handleCallback(Handler.java:587) 06-07 18:50:25.031: W/System.err(15910): at android.os.Handler.dispatchMessage(Handler.java:92) 06-07 18:50:25.031: W/System.err(15910): at android.os.Looper.loop(Looper.java:123) 06-07 18:50:25.039: W/System.err(15910): at android.app.ActivityThread.main(ActivityThread.java:3687) 06-07 18:50:25.039: W/System.err(15910): at java.lang.reflect.Method.invokeNative(Native Method) 06-07 18:50:25.039: W/System.err(15910): at java.lang.reflect.Method.invoke(Method.java:507) 06-07 18:50:25.039: W/System.err(15910): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842) 06-07 18:50:25.039: W/System.err(15910): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 06-07 18:50:25.039: W/System.err(15910): at dalvik.system.NativeStart.main(Native Method)
|
07 Jun 2012, 20:54 |
|
 |
antunes
Google employee
Data de registro: 05 Abr 2011, 04:47 Mensagens: 1968 Localização: Rio de Janeiro
|
 Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Rapaz,
Posta o seu código!!
Abraços!
_________________Alexandre Antunes @a3b @bemobiMoto 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??
|
08 Jun 2012, 00:28 |
|
 |
funes
Android application
Data de registro: 30 Mai 2012, 01:01 Mensagens: 78
|
 Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Meu codigo e apenas um ctrl + c e ctrl + v do seu codigo!
|
08 Jun 2012, 02:08 |
|
 |
antunes
Google employee
Data de registro: 05 Abr 2011, 04:47 Mensagens: 1968 Localização: Rio de Janeiro
|
 Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Tá.. então provavelmente apareceu na tela um toast com a frase "Digite um ID válido!", né??
Vc está rodando o WS no seu PC?? O segundo erro é que ele não conseguiu conectar no WS. Deve ter algum problema na estrutura que vc montou.
Pode explicar melhor como vc montou o seu ambiente de teste??
Abraços!
_________________Alexandre Antunes @a3b @bemobiMoto 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??
|
08 Jun 2012, 02:41 |
|
 |
funes
Android application
Data de registro: 30 Mai 2012, 01:01 Mensagens: 78
|
 Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Baixei seu projeto mais nao sei pq apareceu um monte de erro, entao criei um e copiei os arquivos do seu para o meu certo, entao nao tem diferenca entre o meu e o seu! agora, nao sei pq quando aperto buscar por id aparece falha na rede menos no inserir, quando aperto da erro e fecha o sistema! unica coisa que mudei foi o ip do meu que coloquei 192.168.1.10:8080 pois este e o ip da minha maquina
|
08 Jun 2012, 02:52 |
|
 |
antunes
Google employee
Data de registro: 05 Abr 2011, 04:47 Mensagens: 1968 Localização: Rio de Janeiro
|
 Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Tudo bem, mas o WS está rodando no seu PC também??
Se vc estiver rodando o projeto no emulador, poderia deixar o ip que eu coloquei.
Para esse exemplo funcionar, vc tem que executar 2 projetos, um que é o WS, que vai rodar no tomcat e esse que é android, que vai rodar no emulador. É isso que vc está fazendo??
Esse erro significa que o app android não achou o WS.
Abraços!
_________________Alexandre Antunes @a3b @bemobiMoto 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??
|
08 Jun 2012, 11:23 |
|
 |
funes
Android application
Data de registro: 30 Mai 2012, 01:01 Mensagens: 78
|
 Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Hoje de manha teste o web service, e ele so esta rodando o helloworld outros metodos como cliente/buscarTodos nao esta retornando nada, nao sei se vc lembra tive esse mesmo problema no comeco do desenvolvimento do web service que depois descobri que era o endereco q eu estava digitando errado! agora eu nao sei oq e!
|
08 Jun 2012, 12:42 |
|
 |
antunes
Google employee
Data de registro: 05 Abr 2011, 04:47 Mensagens: 1968 Localização: Rio de Janeiro
|
 Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Aparece algum erro quando vc executa o seu projeto WS??
Abraços!
_________________Alexandre Antunes @a3b @bemobiMoto 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??
|
08 Jun 2012, 14:14 |
|
 |
funes
Android application
Data de registro: 30 Mai 2012, 01:01 Mensagens: 78
|
 Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Nenhum igual eu te disse, o helloworld funciona perfeito, quando digito http://meuip:8080/WebServiceREST/cliente/buscarTodos e coloco "application/json" nao funciona
|
08 Jun 2012, 15:05 |
|
 |
funes
Android application
Data de registro: 30 Mai 2012, 01:01 Mensagens: 78
|
 Re: [Artigo] Web Service RESTful 2 [+Consumir+Android+Code]
Antunes, necessito muito desse exemplo seu para meu tcc, mas esta dando esses problemas, nao tinha como vc me passar o seu projeto ae que esteja rodando perfeito? agradeceria muito se pudesse fazer isso, entao se tiver como mandar nesse email systemfunes@gmail.com ou systemfunes@hotmail.com , desde ja agradeco!!!!
|
08 Jun 2012, 17:39 |
|
|
Quem está online |
Usuários vendo este fórum: Abraao, AdrianoMM, alexmarcolongo, alexsander.miranda, Alexsandro Tirloni, alfredo_ej, allart, am2net, Andre Brito, andreleitao, Androidthebest, Aparec, ariostorecco, arkanjo, arquivo51, AT-AT, attomweb, b7web, berchielli, bocajunior88, Bruno, brunomalka, Captain Typho, Carmizini, cassianotartari, christian, craudiao, criscmaia, Cristranus, dalmeidabr, Daniel Batista, Darth Maul, Darth Vader, deborazb, developermaster, diegorrborges, dnakamashi, Dookan, dreyer, eduardo.ali, eduzortea, eferrari, fabricioLeonard, fabrizior, Felipe Marcondes, felipedornelas, FelipeOliveira, ffabiano, Filipe larizzatti, flashking, Flavio, flaviolemos, gapler, geovanebg, Google Desktop, Gui Pereira, gutodias, gutomilani, hbarroco, hebert, helder84, hopper.frf, icarodavi, infonlinebr, j-menezes, jacksonst, jacksonvpj, jackstuard, Jango Fett, jasn, jeanbr07, Jenius, jhonguitar, jlucasps, Jorge Machin, Josinhaz, juliano, kidush, klebersilvarocha, klyff, konos, leanderdulac, leandroviana, lfalcao, lisbao, Liviosousa, Lucious, malucouto, marciosoliveira, masf_33, mmfsndroid, mtomazzi, nightwatch, nirvana, nivea, nocivus, nq6, obitow, oliverlessa, paulo.esantos, pemam.com.br, persiomotta, Philipe Alves, pingumanbr, r.wil, ramonrabello, raninhofernandes, reginaldofdias, renan.fernandes, renatocoliveira, Ricardo Chikasawa, ricardoogliari, ricdigital, robertofonte, rocha, rodrigo aguiar, rodrigo_corinthians, rogerio.alcantara, rogeriopgomes, ROGÉRIO RODRIGUES, romuloigor, ronamore, Roney dos Santos, SEO Crawler, SERGIO RODRIGUES, Shaman286, sjta, snonca, tchou, thiaguim, ThiMatsu, Thitto, tiasousa, Tognoli, unnamedd, Velhinho, Vinicius 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
|
|