Ver mensagens sem resposta | Ver tópicos ativos Hoje é 20 Nov 2019, 06:44



Responder Tópico  [ 154 Mensagens ]  Ir para a página 1, 2, 3, 4  Próximo
 [ARTIGO] Webservice com jSON completo. 
Autor Mensagem
Android application
Android application

Data de registro: 27 Mai 2011, 17:32
Mensagens: 55
Localização: Vila Velha - ES
Mensagem [ARTIGO] Webservice com jSON completo.
Webservice com jSON no Android

Senhores, o participante do portal android, rogerioxonchim, me pediu (por PM) para ajuda-lo na criação de um webservice pois não estava conseguindo e queria saber como fiz o meu.

Poderia faze-lo por e-mail, mas achei interessante escrever esse tópico, assim posso inclusive debater com os senhores sobre o tema e aperfeiçoar meus conhecimentos atuais, ao mesmo tempo ajudando a comunidade.

O servidor no caso "http://www.dominio.com.br/webservices/sincronizacao.php" pode ser escrito em qualquer linguagem, no caso em PHP.

Seria mais ou menos assim:

$arrayRetorno = array("campor1" => "valor1", "campor2"=>"valor2", "campor3"=>"valor3");

$json["retorno"] = $arrayRetorno;

echo json_encode($json);
 


Que vai imprimir no navegador a seguinde string
{"retorno":[{"campo1":"valor1",{"campo2":"valor2"},{"campo3":"valor3"}}]}



package br.com.gerson;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URI;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.CoreProtocolPNames;
import org.json.JSONArray;
import org.json.JSONObject;
import org.json.JSONTokener;

import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.util.Log;

public class Exemolows extends Activity implements Runnable {
   
    private String page;
    private ProgressDialog pd;
    private String URL_WS = "http://www.dominio.com.br/webservices/sincronizacao.php";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        //Progresso por tempo indeterminado.
        pd = null;
        pd = ProgressDialog.show(this,"Aguarde", "Sincronizando com WebService", true, false);
       
        //Inicia-se uma Thread para processar o webservice
        try{
            Thread thread = new Thread();
            thread.start();
        }catch (Exception e) {
            pd.dismiss();
            Log.e("WS", e.toString());
        }
    }

    public void run() {
        try {
            //Chama o método que fará o trabalho com o Json passando o endereço do webservice.
            this.JSONFile(URL_WS);
        } catch (Exception e) {
            Log.e("WS", e.toString());
        }      
    }
   
    private void JSONFile(String url){
        try{
           
            //Le a pagina
            GetHttp http = new GetHttp(url);
            // page contem a string json
            page = http.page;
           
            //nativo do SDK  da o parse da string json
            JSONObject object = (JSONObject) new JSONTokener(page).nextValue();
           
            // monta o array do retorno do json, lembrando que retorno é o PAI do json impresso em page.
            //{"retorno":[ {"campo1":"valor1"},{"campo2":"valor2"},{"campo3":"valor3"} ]}
            JSONArray message = object.getJSONArray("retorno");
           
            //Percorre o array retornado
            //campo1, 2 e 3 são os nós da string json {"campo1":"valor1"},{"campo2":"valor2"},{"campo3":"valor3"}
            for(int i=0;i<message.length();i++){
                JSONObject lines = (JSONObject) new JSONTokener(message.getString(i)).nextValue();
                Log.d("WS", "[Retorno do WS]");
                Log.d("WS", "Retorno: "+ lines.getString("campo1") );
                Log.d("WS", "Retorno: "+ lines.getString("campo2") );
                Log.d("WS", "Retorno: "+ lines.getString("campo3") );
                Log.d("WS", "[/Retorno do WS]");
            }
           
            Log.d("WS", "Sincronizado com sucesso");
            pd.dismiss();
        }catch (Exception e) {
            Log.e("WS",e.toString());
        }
    }
   
    //Classe de apoio geralmente em outro arquivo .java
    // Essa classe pode ser entendia mas a princípio não precisa-se mexer nela, ela funciona apenas coloquea no projeto.
    // A função dela, basicamente é acessar a pagina que imprime a string json, ler essa string, e coloca-la em page.
    class GetHttp {
       
        public String page = "";
       
        public GetHttp(String URL) throws Exception{
            BufferedReader bufferedReader = null;
            try{
                HttpClient client = new DefaultHttpClient();
                client.getParams().setParameter(CoreProtocolPNames.USER_AGENT, "android");
                HttpGet request = new HttpGet();
                request.setHeader("Content-Type", "text/plain; charset=utf-8");
                request.setURI(new URI(URL));
                HttpResponse response = client.execute(request);
                bufferedReader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
                StringBuffer stringBuffer = new StringBuffer("");
                String line = "";
                String NL = System.getProperty("line.separator");
               
                Log.d("GetHttp","Iniciando leitura de buffer.");
                while ((line = bufferedReader.readLine()) != null){
                    stringBuffer.append(line + NL);
                    Log.d("GetHttp", stringBuffer.toString());
                }
                bufferedReader.close();
                Log.d("GetHttp", "Leitura de buffer finalizada");
               
                page = stringBuffer.toString();
            }catch (Exception e) {
                Log.e("GetHttp", e.toString());
            }finally{
                if (bufferedReader != null){
                    try{
                        bufferedReader.close();
                    }catch (IOException e){
                        Log.e("GetHttp", e.toString());
                    }
                }
            }
        }
    }
}
 


Basicamente o trabalho fica no método JSONFile que vai ler a string retornada pelo webservice e capiturada pela classe GetHttp, as únicas alterações precisam ser feitas no for que está no JSONFIle pois ele vai percorrer todos os "campos" do "retorno".

Esse exemplo vai imprimir no LogCat as saidas basta procurar lá.

Para exemplificar um uso posterior use mais ou menos o seguinte:

//Adicione esse campo.
private ArrayList<String> resultado;

@Override
    public void onCreate(Bundle savedInstanceState) {
   // resto do método onCreate...
 



resultado = new ArrayList<String>();
for(int i=0;i<message.length();i++){
                JSONObject lines = (JSONObject) new JSONTokener(message.getString(i)).nextValue();
                resultado.add(lines.getString("campo1") );
                resultado.add(lines.getString("campo2") );
                resultado.add(lines.getString("campo3") );
            }
 


O tratamento de segurança do webservice no servidor, fica por conta.

É isso ai, espero ajudar com esse código, se tiver alguma dúvida, manda ae, que eu tento ajudar.

Att,
Gerson Novais

_________________
Att,
Gerson Novais


16 Jun 2011, 13:17
Perfil WWW
What is Android?
What is Android?

Data de registro: 23 Mai 2011, 18:37
Mensagens: 5
Mensagem Re: "Webservice" com jSON completo.
Cara vc nao tem um fonte funcionando tipo um passo a passo
axo que vendo um webservice funcionando com android mesmo que simples
ja iria tirar muitas duvidas uma que nao conheco php meu webservice esta em .jsp, varri a internet e vi que muitos como eu nao conseguem pegar um retorno de uma lista de registros ex:. produtos cadastrados em uma base remota mysql....


16 Jun 2011, 17:12
Perfil
Android application
Android application

Data de registro: 27 Mai 2011, 17:32
Mensagens: 55
Localização: Vila Velha - ES
Mensagem Re: "Webservice" com jSON completo.
Cara infelizmente eu não tenho, o meu webservice é empresarial ou seja não posso abrilo/dar-lhe acesso.

Lembrando que o que mostrei não é bem um webservice (xml) é mais fácil, pois uma pagina web ( como vc disse um jsp) vai imprimir no navegador um jSON como o que eu mostrei no exemplo.

Esse codigo que mostrei faz o necessário, chama a URL do seu servico http://www.dominio.com.br/pagina.jsp que imprimi o jSON então o android vai receber esse jSON em page e vai fazer os tramites necessários para entender o jSON e retornar um Array ( no comando for que mostrei).

Procure como usar jSON no jSP ( não sei). Faça um jsp que, quando acessado pelo navegador http://www.dominio.com.br/arquivo.jsp vai imprimir na tela unica e exclusivamenta a string jSON. Feito isso, crie um app para android se baseando nesse exmplo que postei ai que vc vai conseguir entender.


att,
Gerson Novais

_________________
Att,
Gerson Novais


16 Jun 2011, 17:28
Perfil WWW
Application framework
Application framework
Avatar de usuário

Data de registro: 12 Nov 2010, 13:52
Mensagens: 449
Localização: Resplendor MG
Mensagem Re: "Webservice" com jSON completo.
Gerson, parabéns pelo tópico... muito completo e de boa qualidade...

_________________
Tentando fazer melhor, a cada dia.


16 Jun 2011, 17:30
Perfil WWW
What is Android?
What is Android?

Data de registro: 23 Mai 2011, 18:37
Mensagens: 5
Mensagem Re: "Webservice" com jSON completo.
Cara descula minha ignorancia pois sou muito leigo no assunto to me aventurando pois quero criar meu tcc usando android e webservice mas
vi que não e mole ....
se vc pudesse colocar um exemplo bem mastigado pra mim assimilar eu agradeço


16 Jun 2011, 17:45
Perfil
Anatomy of an App
Anatomy of an App

Data de registro: 05 Jul 2010, 12:47
Mensagens: 132
Mensagem Re: "Webservice" com jSON completo.
Parabéns ótimo tópico! Fiz o meu com o Ksoap, mas vou fazer um com json só para testar.


16 Jun 2011, 18:37
Perfil
Android application
Android application

Data de registro: 27 Mai 2011, 17:32
Mensagens: 55
Localização: Vila Velha - ES
Mensagem Re: "Webservice" com jSON completo.
rogerioxonchim,

Posso tentar ajuda-lo, porem é preciso entender que webservice sendo ele com (xml Ksoap) ou com jSON sempre vai envolver uma segunda camada, que é a camada do servidor, ou seja, o quem vai prover as informações.

Vou pensar em uma forma de completar esse tópico e disponibilizar on-line um webservice liberado para que testem seus webservices.

Att,
Gerson Novais

_________________
Att,
Gerson Novais


16 Jun 2011, 22:20
Perfil WWW
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] Webservice com jSON completo.
Gerson,

Lindo tópico!!! Alto nível!!

Está de parabéns!!

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??


17 Jun 2011, 01:22
Perfil WWW
Hello Android
Hello Android

Data de registro: 18 Jun 2011, 20:01
Mensagens: 49
Mensagem Re: [ARTIGO] Webservice com jSON completo.
realmente ficou bem legal o topico, porém fiquei em dúvida quanto a esta parte do código:
     //Inicia-se uma Thread para processar o webservice
        try{
            Thread thread = new Thread();
            thread.start();
        }catch (Exception e) {
            pd.dismiss();
            Log.e("WS", e.toString());
        }
 


Ela é realmente necessária?
Entendo que a própria activite deveria ser instanciada como uma thread (provavelmente por uma action ou service chamador). Isso antes mesmo do método onCreate desta mesma Activite ser chamado. Como a thread neste código é criada sem parametro nem nada, não entendi o que ela faz. É possível explicar essa parte?


27 Jun 2011, 15:20
Perfil
What is a Activity?
What is a Activity?

Data de registro: 15 Jun 2011, 17:56
Mensagens: 10
Mensagem Re: [ARTIGO] Webservice com jSON completo.
Cara, parabéns mesmo, eu me bato aqui sempre com o meu servidor JAVA -> JSON, ficaria bem mais fácil fazer ele em PHP mesmo, mas agora que já ta feito, vamo lá, rsrs...
De qualquer forma, ótima iniciativa.


29 Jun 2011, 11:28
Perfil
Anatomy of an App
Anatomy of an App

Data de registro: 12 Mar 2011, 13:32
Mensagens: 109
Mensagem Re: [ARTIGO] Webservice com jSON completo.
Boa noite. Primeiramente quero agradecer ao criador do primeiro tópico e ao usuário "antunes" pela força dada.
Preciso só de uma informação:
Para recuperar o "array" do webservice, usando json está exemplificado indiretamente neste tópico.
No webservice, usando Jersey, eu consigo incrementar um "registro", imaginemos, em um array, recebendo o objeto desse array como parâmetro, no meu método.
Mas aqui no Android, como eu enviaria isso para o webservice?
Tudo precisaria de uma Classe que fará o encapsulamento disso pra mim, mas como eu converteria pra enviar?

_________________
Marcos Roberto da Fonseca
Desenvolvimento de software

Maiores informações:
http://zipersoft.com.br e tem também nosso blog: http://zipersoft.com.br/blog


14 Jul 2011, 00:33
Perfil
Anatomy of an App
Anatomy of an App

Data de registro: 12 Mar 2011, 13:32
Mensagens: 109
Mensagem Re: [ARTIGO] Webservice com jSON completo.
Como eu faço o processo inverso? Mandar algo pra um webservice, imagine que ele lá no webservice espera um objeto de determinada classe.
Como, aqui no Android, consigo enviar esse "objeto" para o webservice?
Esse código abaixo, retirei de um link postado aqui no portal:

http://www.k19.com.br/artigos/criando-u ... l-em-java/
http://www.k19.com.br/artigos/webservic ... ando-json/
http://bdoughan.blogspot.com/2010/08/cr ... rt-15.html
http://jersey.java.net/


o método que receberia esse objeto "Banda" seria:

@POST
@Consumes("text/xml")
public String adicionaBanda(Banda banda) {
banda.setId(bandasMap.size() + 1);
bandasMap.put(banda.getId(), banda);
return "";
 }
 


"Banda" é uma Classe comum, Bean, com atributos, setts e getts.

obg.

_________________
Marcos Roberto da Fonseca
Desenvolvimento de software

Maiores informações:
http://zipersoft.com.br e tem também nosso blog: http://zipersoft.com.br/blog


14 Jul 2011, 00:40
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] Webservice com jSON completo.
Marquinho,

É exatamente isso, mas se vc vai receber um json, ficaria assim:


@POST
@Consumes("application/json")
@Produces("application/json")
public String adicionaBanda(Banda banda) {
banda.setId(bandasMap.size() + 1);
bandasMap.put(banda.getId(), banda);
return "";
 }
 


Assim, vc recebe um objeto Banda no formato json e devolve uma String no formato json. Nesse retorno, vc pode colocar se a inclusão funcionou.

No android, vc pode gerar o json a partir da sua classe Banda, que tbm deverá ser criada lá. Dessa forma:


Gson gson = new Gson();
Banda banda = gson.fromJson(result, Banda.class);
 


Aqui, result é o json em forma de string, vc estará mapeando o json na sua classe, desde que ela seja igual a classe Banda do ws.

O GSON é uma api do google pra trabalhar com json, basta ir no site, baixar o .jar e colocar no seu projeto.
http://code.google.com/p/google-gson/

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??


15 Jul 2011, 14:04
Perfil WWW
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] Webservice com jSON completo.
Assim vc converte o seu objeto em json:


Gson gson = new Gson();
String bandaJson= gson.toJson(banda);
 


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??


15 Jul 2011, 14:07
Perfil WWW
Anatomy of an App
Anatomy of an App

Data de registro: 12 Mar 2011, 13:32
Mensagens: 109
Mensagem Re: [ARTIGO] Webservice com jSON completo.
thanks

_________________
Marcos Roberto da Fonseca
Desenvolvimento de software

Maiores informações:
http://zipersoft.com.br e tem também nosso blog: http://zipersoft.com.br/blog


19 Jul 2011, 01:10
Perfil
Anatomy of an App
Anatomy of an App

Data de registro: 12 Mar 2011, 13:32
Mensagens: 109
Mensagem Re: [ARTIGO] Webservice com jSON completo.
Boa tarde a todos.

Até o presente nomento, por webservice, recuperamos Arrays, Strings, int. Há alguma maneira de recuperarmos um arquivo de audio?

Imaginem vocês ao tocar no botão "A" e executar o som da letra "A".
Eu queria recuperar esse som do Webservice.

É possível?
Alguém já viu algo também a respeito de multimidea, executar algum arquivo de audio no android?

_________________
Marcos Roberto da Fonseca
Desenvolvimento de software

Maiores informações:
http://zipersoft.com.br e tem também nosso blog: http://zipersoft.com.br/blog


26 Jul 2011, 14: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] Webservice com jSON completo.
Com JSON acho improvável, vc não deve conseguir converter um arquivo de audio, mas vc pode tratar como um arquivo normal.

No web service, vc coloca ele no WEB-CONTENT, ele vai ficar na raiz do seu projeto (http://localhost:8080/"seu projeto"/"seu arquivo de audio") e pega ele como file mesmo.

http://www.helloandroid.com/tutorials/h ... our-device

Isso funciona, eu já usei!!

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??


27 Jul 2011, 12:51
Perfil WWW
Anatomy of an App
Anatomy of an App

Data de registro: 12 Mar 2011, 13:32
Mensagens: 109
Mensagem Re: [ARTIGO] Webservice com jSON completo.
Bacana.
Usuário antunes, fico muito grato mesmo pela ajuda!
Você sabe que tudo o que faz de bom hoje, é recompensado no futuro.
Tenho certeza que muitos usuários do Portal também se sentem agradecidos pela sua ajuda.
Muito obriagado!

E qualquer dúvida, claro... eu posto!

_________________
Marcos Roberto da Fonseca
Desenvolvimento de software

Maiores informações:
http://zipersoft.com.br e tem também nosso blog: http://zipersoft.com.br/blog


28 Jul 2011, 11:49
Perfil
Anatomy of an App
Anatomy of an App

Data de registro: 21 Jul 2011, 19:18
Mensagens: 181
Localização: Maringá - PR
Mensagem Re: [ARTIGO] Webservice com jSON completo.
Dúvida... Gostaria de saber se é possivel fazer com um .wsdl o mesmo que vc fez com o .php, sou novato em WS e percebi que é gerado um arquivo .wsdl parecido com xml. Dessa forma eu não precisaria ficar imprimindo na tela tdo que eu precisar buscar????


01 Ago 2011, 15:33
Perfil
Anatomy of an App
Anatomy of an App

Data de registro: 21 Jul 2011, 19:18
Mensagens: 181
Localização: Maringá - PR
Mensagem Re: [ARTIGO] Webservice com jSON completo.
Bom dia,

estava seguindo o exemplo mas na linha abaixo não consegui encontrar a classe GetHttp para importá-la.
Os imports estão exatamente iguais aos do seu exemplo.
Foi necessário adicionar alguma biblioteca adicional?


//Le a pagina
GetHttp http = new GetHttp(url);
 


03 Ago 2011, 13:23
Perfil
Anatomy of an App
Anatomy of an App

Data de registro: 12 Mar 2011, 13:32
Mensagens: 109
Mensagem Re: [ARTIGO] Webservice com jSON completo.
Pessoal boa noite.

Trabalhando com Json, no meio do caminho, encontrei um probleminha...

O webservice que estou utilizando, retorna um Array.
Como o exemplo abaixo:

{"produto":[{"codigo":"1","descricao":"REFRIGERANTE"},
{"codigo":"2","descricao":"CERVEJA"},{"codigo":"3","descricao":"DRINKS"},{"codigo":"5","descricao":"SALADAS"}]}

Note-que é um Array, em função das [ ], simbolizando o Array.

No caso de um Webservice que me retorne um Array, pode ser que esse Array tenha somente 1 item.
Abaixo, como é o retorno desse Webservice... SEM AS [ ]
{"subgrupo":{"codigo":"4","descricao":"PORÇÕES"}}

No android, quando vamos decodificar a resposta do Webservice, o mesmo é convertido.. abaixo o código:

JSONArray message = object.getJSONArray("subgrupo");

Porém ao passar por essa linha, recuperando o coteúdo de um Webservice que espera-se que seja um Array, imaginemos que veio apenas 1 ítem, como mostrado anteriormente, sem as [] porém ele caí no cath, alegando no Logcat não conseguir converter.

Se alguém já passou por isso, o que fez?

obg.

_________________
Marcos Roberto da Fonseca
Desenvolvimento de software

Maiores informações:
http://zipersoft.com.br e tem também nosso blog: http://zipersoft.com.br/blog


03 Ago 2011, 21:39
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] Webservice com jSON completo.
Marcos,

O jersey não é muito bom pra passar array de objetos e dá uns problemas com o GSON, que pelo visto vc não está usando, que aproveito pra te aconselhar a usar ele no android.

Aí é que está a malandragem. O que eu fiz, no projeto que te mandei, foi o seguinte:

No WS uso o próprio GSON pra criar o JSON e devolvo uma simples string.

@GET
    @Path("/listaCliente")
    @Produces(MediaType.APPLICATION_JSON)
    public String getListaClientes(@Context HttpHeaders headers) {

        Gson gson = new Gson();
        String listaCliente = gson.toJson(new ClienteSimplesBusiness().buscarLista()); //esse método devolve um arraylist do tipo cliente simples
        return listaCliente;
    }
 


No droid eu pego essa string, coloco ela num array comum e depois faço um for pra pegar cada posição desse array e passar pro meu array "tipado".


public ArrayList<ClienteSimples> getListaClientes(String url) {
        String result = queryRESTurl(url);
        if (result == null) {
            Log.e("NGVL", "Falha ao acessar WS");
            return null;
        }
        try {
            Gson gson = new Gson();
            ArrayList<ClienteSimples> listaClientes = new ArrayList<ClienteSimples>();
            JsonParser parser = new JsonParser();
            JsonArray array = parser.parse(result).getAsJsonArray();
           
            for (int i = 0; i < array.size(); i++) {
                listaClientes.add(gson.fromJson(array.get(i), ClienteSimples.class));
            }

            return listaClientes;
        } catch (Exception e) {
            Log.e("WS", e.toString());
            return null;
        }
    }
 


Qualquer dúvida é só falar!!

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??


04 Ago 2011, 00:45
Perfil WWW
Anatomy of an App
Anatomy of an App

Data de registro: 12 Mar 2011, 13:32
Mensagens: 109
Mensagem Re: [ARTIGO] Webservice com jSON completo.
Alexandre, boa tarde!

Seguinte, eu dei uma olhada no código aqui e fiquei com uma dúvida:

Você pega o retorno do WS em uma String:
String result = queryRESTurl(url);

Esse queryRESTurl(url) é um método que utiliza a já conhecida Classe HttpGet. Porém ele usa uma instância da Classe ConnectWS.

Nessa Classe, o que verdadeiramente acontece?

Dá pra mim ignorar ela, e recuperar direto na Classe HttpGet?

_________________
Marcos Roberto da Fonseca
Desenvolvimento de software

Maiores informações:
http://zipersoft.com.br e tem também nosso blog: http://zipersoft.com.br/blog


04 Ago 2011, 14:36
Perfil
Anatomy of an App
Anatomy of an App

Data de registro: 21 Jul 2011, 19:18
Mensagens: 181
Localização: Maringá - PR
Mensagem Re: [ARTIGO] Webservice com jSON completo.
Estou com problemas para exibir na tela do android o resultado do meu WS com json.
Simplesmente não exibe nada na tela, meu WS está normal.
Alguem poderia me ajudar ? Será q eu estou fazendo algo errado?


package br.com.accion.android;

import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;

import org.json.JSONException;

import com.google.gson.Gson;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;


public class AndroidProjectActivity extends Activity {
   
    /** Called when the activity is first created. */
   
    @Override
    public void onCreate(Bundle savedInstanceState) {
       
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);         
        try {
            TextView tv = (TextView)findViewById(R.id.TextView01);

            String baseUrl = "http://10.0.2.2:8084/WebServices/resources/cliente";      
           
            URL url = new URL(baseUrl);
            URLConnection conn = url.openConnection();
           
            InputStream is = conn.getInputStream();
            BufferedInputStream bis = new BufferedInputStream(is);
            StringBuffer conteudo = new StringBuffer();         
            while(bis.available() > 0){
                conteudo.append((char) bis.read());
            }

            String json = conteudo.toString();
            Gson gson = new Gson();
            ClienteEstrutura obj = gson.fromJson(json, ClienteEstrutura.class);
            tv.setText("Apelido: "+ obj.apelidoCadCftv +"\n\n");
            tv.append("CadCFTVID: " + obj.cadCftvId +"\n\n");
            tv.append("CPF: "+ obj.cnpjCpfCadcftv +"\n\n");
           
            tv.append("tentou inserir");

        } catch(IOException ex){
            //tv.append("teste"+ ex.getMessage());
        } catch(Exception e){
            Log.e("Erro: ", e.toString());
        }
       
    }        
   
}
 


04 Ago 2011, 16:04
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] Webservice com jSON completo.
marquinhofonceka escreveu:
Alexandre, boa tarde!

Seguinte, eu dei uma olhada no código aqui e fiquei com uma dúvida:

Você pega o retorno do WS em uma String:
String result = queryRESTurl(url);

Esse queryRESTurl(url) é um método que utiliza a já conhecida Classe HttpGet. Porém ele usa uma instância da Classe ConnectWS.

Nessa Classe, o que verdadeiramente acontece?

Dá pra mim ignorar ela, e recuperar direto na Classe HttpGet?


Essa classe ConnectWS é um singleton. Ela existe pra me garantir que exista apenas uma instância do HttpGet.

Dá pra vc ignorar sim, basta chamar o HttpGet direto dentro do método queryRESTurl, mas é sempre bom usar um singleton.. =D

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??


04 Ago 2011, 16:30
Perfil WWW
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] Webservice com jSON completo.
Guilherme,

Qual o erro que vc recebe?? O que aparece na tela?? Como está o log??

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??


04 Ago 2011, 16:33
Perfil WWW
Anatomy of an App
Anatomy of an App

Data de registro: 21 Jul 2011, 19:18
Mensagens: 181
Localização: Maringá - PR
Mensagem Re: [ARTIGO] Webservice com jSON completo.
No LogCat: com.google.gson.stream.MalformedJsonException: Unterminated string near
La no meu WS eu apenas tenho uma classe assim:

 @GET
    @Produces("application/json")
    public List<Cliente> listaClientes() {
        List lista = new ArrayList();
        String sql = "SELECT * FROM XXXX";
 


04 Ago 2011, 17:39
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] Webservice com jSON completo.
O problema é que o seu webservice está devolvendo uma lista de cliente e no seu android vc tenta colocar essa lista em um objeto diferente.

ClienteEstrutura obj = gson.fromJson(json, ClienteEstrutura.class);


Pra recuperar um objeto ClienteEstrutura, o seu WS tem que enviar o mesmo objeto ClienteEstrutura.

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??


04 Ago 2011, 17:50
Perfil WWW
Anatomy of an App
Anatomy of an App

Data de registro: 21 Jul 2011, 19:18
Mensagens: 181
Localização: Maringá - PR
Mensagem Re: [ARTIGO] Webservice com jSON completo.
Eu fiz essa alteração para ver se eu consigo retornar uma List. Mas simplesmente não mudou nada e o erro é o mesmo ainda.
Voce pode me ajudar a como proceder?

List<Cliente> obj = (List<Cliente>) gson.fromJson(json, Cliente.class);
 


04 Ago 2011, 18:06
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] Webservice com jSON completo.
Guilherme,

A resposta para a sua pergunta é exatamente a resposta que eu dei pro Marcos aqui no tópico, perto da sua primeira pergunta, ali em cima!!

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??


04 Ago 2011, 20:00
Perfil WWW
Anatomy of an App
Anatomy of an App

Data de registro: 21 Jul 2011, 19:18
Mensagens: 181
Localização: Maringá - PR
Mensagem Re: [ARTIGO] Webservice com jSON completo.
Antunes...
Muito obrigado, era exatamente isso que eu precisava!!! Meus parabéns e desculpa o incomodo, sou novato ainda.

Agora eu tenho problema com o tamanho do meu Buffer, quando eu limito o tamanho para trazer menos resultados no WS
os registros são exibidos, mas qndo eu não limito o Logcat me mostra erro de JsonSyntaxException : MalformedJsonException.


05 Ago 2011, 12:06
Perfil
Hello World!
Hello World!

Data de registro: 13 Fev 2008, 14:02
Mensagens: 23
Mensagem Re: [ARTIGO] Webservice com jSON completo.
Pessoal, acompanhei o artigo inteiro, e consegui fazer a conexao do android com o JSON retornado pelo acesso ao banco de dados.

Entretanto, não consegui acompanhar o conceito da devolução do objeto para persistência no banco de dados.

No meu caso, tenho uma classe bem simples, que realiza o acesso ao banco de dados:

@Path("/cidadesJSON")
public class CidadeDB {
    @GET
    @Produces("application/json")
    public List<Cidade> getAll()  {
        return (List<Cidade>) retornaTodosBancoDados();
    }
 


O método retornaTodosBancoDados() conecta no banco mysql, retorna uma lista, e eu consigo obter a lista em formato JSON, como no exemplo:

Citação:
{"cidade":[{"codigo":"427","descricao":"Francisco Morato"},{"codigo":"566","descricao":"Barra Bonita"},{"codigo":"567","descricao":"Pato de Minas"},{"codigo":"572","descricao":"Lavras"}]}


Até aqui... tudo bem! Porém, agora como eu faço para incluir uma nova cidade?

Fiz da seguinte forma, no Android:


    Cidade novaCidade = new Cidade();
    novaCidade.setCodigo(edtCodigo.getText().toString());
    novaCidade.setDescricao(edtDescricao.getText().toString());

    Gson gson = new Gson();
    String jsonCidade = gson.toJson(novaCidade, Cidade.class);
 


Nesse ponto, tenho o jsonCidade corretamente formado. Tenho já criado um método para salvar isso no banco de dados, dentro da minha classe CidadeDB:


    @POST
    @Consumes("application/json")
    public void saveFromJSON(String jsonInput) {
        try {
            Gson gson = new Gson();
            Cidade cidade = gson.fromJson(jsonInput, Cidade.class);

            this.save(novaCidade);
       
        } catch (Exception e) {
            System.out.println(e.toString());
        } finally {
            System.out.println("Finalizando...");
        }
    }
 


Mas como eu faço a chamada dela? Pelo que eu entendi, quando eu acesso uma página, ela já executa automaticamente o método anotado como @GET, e executa o mesmo...

E para fazer executar o método anotado como @POST? Preciso fazer uma chamada HTTP? Preciso passar meu objeto ou a codificação JSON como parâmtro? Como fazer essa chamada e passar esse parâmetro?


17 Ago 2011, 12:40
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] Webservice com jSON completo.
gapler,

Na verdade vc não precisa fazer isso não. Basta vc receber o seu objeto mesmo que o jersey já faz o trabalho sujo!!

Tenta assim!!


@POST
    @Consumes("application/json")
    public void saveFromJSON(Cidade cidade) {
        try {

            this.save(novaCidade);

        } catch (Exception e) {
            System.out.println(e.toString());
        } finally {
            System.out.println("Finalizando...");
        }
    }
 


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??


17 Ago 2011, 16:58
Perfil WWW
Hello World!
Hello World!

Data de registro: 13 Fev 2008, 14:02
Mensagens: 23
Mensagem Re: [ARTIGO] Webservice com jSON completo.
Bom, até aí eu entendi...

só não entendi como fazer na minha activity para chamar esse método.

Preciso fazer uma chamada tipo:

            DefaultHttpClient httpclient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost("http://localhost:9039/teste/resources/cidadesJSON");
            HttpResponse response = httpclient.execute(httpPost);
 

?


17 Ago 2011, 19:28
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] Webservice com jSON completo.
É quase isso mesmo. Só que vc tem que colocar o seu objeto aí.

Faz assim:


Gson gson = new Gson();
String jsonCidade = gson.toJson(novaCidade, Cidade.class); //aqui vc cria o seu JSON

StringEntity sEntity = new StringEntity(novaCidade, "UTF-8"); //aqui vc cria a sua StringEntity pra ser colocada no seu httpPost

DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost("http://localhost:9039/teste/resources/cidadesJSON");

httpPost.setEntity(sEntity); //aqui vc coloca o seu objeto no httpPost

HttpResponse response = httpclient.execute(httpPost);
 


Uma parada que eu faço, que é muito interessante e aconselhável, é criar o httpCliente como singleton! Pro android vale a pena, já que vc garante ter apenas uma instância da classe DefaultHttpClient.

Ahh... lembrando que toda essa parte de comunicação com o WS não precisa ser uma activity, ela pode e deve ser uma classe java que vc instancia e usa dentro da sua activity.

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??


17 Ago 2011, 22:10
Perfil WWW
Anatomy of an App
Anatomy of an App

Data de registro: 12 Mar 2011, 13:32
Mensagens: 109
Mensagem Re: [ARTIGO] Webservice com jSON completo.

Bom dia a todos.

Poderiam, por gentileza compartilhar as Classes:

StringEntity


e:

DefaultHttpClient httpclient = new DefaultHttpClient();


Obrigado.

_________________
Marcos Roberto da Fonseca
Desenvolvimento de software

Maiores informações:
http://zipersoft.com.br e tem também nosso blog: http://zipersoft.com.br/blog


18 Ago 2011, 11:31
Perfil
Hello World!
Hello World!

Data de registro: 13 Fev 2008, 14:02
Mensagens: 23
Mensagem Re: [ARTIGO] Webservice com jSON completo.
Agora, quase funcionou...

Porém, ocorreu o seguinte - ele acusava erro na linha

StringEntity sEntity = new StringEntity(novaCidade, "UTF_8");

Se eu coloco essa linha, ele informa que não existe o contrutor para o meu objeto. Tive que trocar para
StringEntity sEntity = new StringEntity(jsonCidade, "UTF_8");


é isso mesmo?

Porém, fazendo essa mudança, ele não funcionou corretamente. Inseri um tratamento do objeto response, e ele está retornando uma página HTML com mensagem do Glassfish:

Citação:
HTTP Status 415 - Unsupported Media Type
The server refused this request because the request entity is in a format not supported by the requested resource for the requested method (Unsupported Media Type).


Provavelmente por causa do tipo do objeto no StringEntity que eu tive que mudar aí em cima...

Alguma ideia?


18 Ago 2011, 11:46
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] Webservice com jSON completo.
marquinhofonceka escreveu:

Bom dia a todos.

Poderiam, por gentileza compartilhar as Classes:

StringEntity


e:

DefaultHttpClient httpclient = new DefaultHttpClient();


Obrigado.


Essas classes já deveriam estar no seu jdk!!

Tenta colocar os imports na classe:

import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
 


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??


19 Ago 2011, 02:40
Perfil WWW
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] Webservice com jSON completo.
gapler escreveu:
Agora, quase funcionou...

Porém, ocorreu o seguinte - ele acusava erro na linha

StringEntity sEntity = new StringEntity(novaCidade, "UTF_8");

Se eu coloco essa linha, ele informa que não existe o contrutor para o meu objeto. Tive que trocar para
StringEntity sEntity = new StringEntity(jsonCidade, "UTF_8");


é isso mesmo?

Porém, fazendo essa mudança, ele não funcionou corretamente. Inseri um tratamento do objeto response, e ele está retornando uma página HTML com mensagem do Glassfish:

Citação:
HTTP Status 415 - Unsupported Media Type
The server refused this request because the request entity is in a format not supported by the requested resource for the requested method (Unsupported Media Type).


Provavelmente por causa do tipo do objeto no StringEntity que eu tive que mudar aí em cima...

Alguma ideia?


É isso mesmo, vc deve usar assim mesmo. Foi falha minha.

StringEntity sEntity = new StringEntity(jsonCidade, "UTF_8");


Agora faz o seguinte: Posta o seu método do WS e o do android pra gente dar uma olhada.

Antes disso, seu objeto Cidade está exatamente igual tanto no WS quanto no android???

Se forem diferentes, vai dar erro!!!

Tenta isso aqui tbm:

Troca o seu:
@Consumes("application/json")


Por esse(Eu só uso assim.. vai que...):
@Consumes(MediaType.APPLICATION_JSON)


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??


19 Ago 2011, 02:50
Perfil WWW
Hello World!
Hello World!

Data de registro: 13 Fev 2008, 14:02
Mensagens: 23
Mensagem Re: [ARTIGO] Webservice com jSON completo.
Realmente, não consegui transferir o objeto em si, mas consegui enviar o JSON, através do recurso:

  HttpResponse response;
            DefaultHttpClient httpclient = new DefaultHttpClient();
            HttpPost httpost = new HttpPost("http://meuip/teste/resources/cidadesJSON");

            JSONObject holder = new JSONObject();
   
            holder.put( "codigo", edtCodigo.getText().toString() );  
            holder.put( "descricao", edtDescricao.getText().toString() );  

            StringEntity se = new StringEntity(holder.toString());
            httpost.setEntity(se);
            httpost.setHeader("Accept", "application/json");
            httpost.setHeader("Content-type", "application/json");

            ResponseHandler responseHandler = new BasicResponseHandler();
            response = (HttpResponse) httpclient.execute(httpost, responseHandler);
           
            HttpEntity entity = response.getEntity();
 


O problema é que eu preciso agora pegar o JSON na minha classe para fazer a conversão e gravação no banco de dados. E quando eu uso o comando:

            Gson novoGson = new Gson();
            Cidade cidade = novoGson.fromJson(jasonInput, Cidade.class);
 


Eu tenho o seguinte erro, tem na linha onde eu instancio o Gson:


>Tipo "com.google.gson.Gson" desconhecido
e a exception:
AVISO: StandardWrapperValve[JerseyRESTService]: PWC1406: Servlet.service() for servlet JerseyRESTService threw exception
java.lang.NoClassDefFoundError: com/google/gson/Gson
 


Detalhe que a classe Gson está inserida na minha biblioteca, corretamente. Alguma ideia?

De preferência, se eu conseguisse enviar o objeto seria ideal, mas se eu conseguir tratar o JSON também resolveria...


19 Ago 2011, 17:04
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] Webservice com jSON completo.
antunes escreveu:

Agora faz o seguinte: Posta o seu método do WS e o do android pra gente dar uma olhada.

Antes disso, seu objeto Cidade está exatamente igual tanto no WS quanto no android???

Se forem diferentes, vai dar erro!!!

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??


19 Ago 2011, 23:35
Perfil WWW
Hello World!
Hello World!

Data de registro: 13 Fev 2008, 14:02
Mensagens: 23
Mensagem Re: [ARTIGO] Webservice com jSON completo.
Sim, os dois são exatamente iguais - CTRL+C/CTRL+V. Tanto que eu tentei até mesmo colocar o bean em um projeto separado e importar no android. As duas soluções funcionaram.

Eu consegui resolver o problema do parser usando o JSONTokener().

Agora está tudo funcionando, porém, sem trafegar o objeto, trafegando a string do JSON, apenas.


22 Ago 2011, 11:41
Perfil
What is Android?
What is Android?

Data de registro: 17 Jul 2011, 23:50
Mensagens: 3
Mensagem Re: [ARTIGO] Webservice com jSON completo.
gapler, copia o arquivo gson.jar para o diretório WEB-INF/lib de seu projeto


22 Ago 2011, 13:14
Perfil
What is Android?
What is Android?

Data de registro: 17 Jul 2011, 23:50
Mensagens: 3
Mensagem Re: [ARTIGO] Webservice com jSON completo.
Alguém sabe como receber uma lista de objetos no servidor?

Grato,
Fabricio


22 Ago 2011, 13:19
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] Webservice com jSON completo.
Eu já respondi isso.. olha aqui!!

antunes escreveu:
Marcos,

O jersey não é muito bom pra passar array de objetos e dá uns problemas com o GSON, que pelo visto vc não está usando, que aproveito pra te aconselhar a usar ele no android.

Aí é que está a malandragem. O que eu fiz, no projeto que te mandei, foi o seguinte:

No WS uso o próprio GSON pra criar o JSON e devolvo uma simples string.

@GET
    @Path("/listaCliente")
    @Produces(MediaType.APPLICATION_JSON)
    public String getListaClientes(@Context HttpHeaders headers) {

        Gson gson = new Gson();
        String listaCliente = gson.toJson(new ClienteSimplesBusiness().buscarLista()); //esse método devolve um arraylist do tipo cliente simples
        return listaCliente;
    }
 


No droid eu pego essa string, coloco ela num array comum e depois faço um for pra pegar cada posição desse array e passar pro meu array "tipado".


public ArrayList<ClienteSimples> getListaClientes(String url) {
        String result = queryRESTurl(url);
        if (result == null) {
            Log.e("NGVL", "Falha ao acessar WS");
            return null;
        }
        try {
            Gson gson = new Gson();
            ArrayList<ClienteSimples> listaClientes = new ArrayList<ClienteSimples>();
            JsonParser parser = new JsonParser();
            JsonArray array = parser.parse(result).getAsJsonArray();
           
            for (int i = 0; i < array.size(); i++) {
                listaClientes.add(gson.fromJson(array.get(i), ClienteSimples.class));
            }

            return listaClientes;
        } catch (Exception e) {
            Log.e("WS", e.toString());
            return null;
        }
    }
 


Qualquer dúvida é só falar!!

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??


22 Ago 2011, 22:31
Perfil WWW
What is Android?
What is Android?

Data de registro: 17 Jul 2011, 23:50
Mensagens: 3
Mensagem Re: [ARTIGO] Webservice com jSON completo.
Valeu antunes! Consegui resolver.


25 Ago 2011, 10:33
Perfil
Anatomy of an App
Anatomy of an App

Data de registro: 12 Mar 2011, 13:32
Mensagens: 109
Mensagem Re: [ARTIGO] Webservice com jSON completo.
Olá a todos.
Tenho uma dúvida.

Seguinte, abaixo tenho o método do Webservice que retorna uma Array list para a aplicação Android...

@GET
    @Produces(MediaType.APPLICATION_JSON)
    @Path("/todos")
    public String retornaTodosProdutos(){
        Gson gson = new Gson();
       
        String retorno = gson.toJson(ProdutoDAO.retornaListaTodosProduto());
       
        return retorno;
    }
 


No Android, eu recupero essa lista com o método abaixo:


public static List<Produto> retornaTodosProdutos(){
       
        List<Produto> listaProdutos = new ArrayList<Produto>();
        String linha = "";
       
        try{
            GetHttp getHttp = new GetHttp(Urls.webserviceTodosProduto);
            linha = getHttp.page;
           
            Gson gson = new Gson();
            JsonParser parser = new JsonParser();
            JsonArray array = parser.parse(linha).getAsJsonArray();
           
            for(int i=0; i<array.size(); i++){
               
                listaProdutos.add(gson.fromJson(array.get(i), Produto.class));
               
            }
           
        }catch (Exception e) {
           
        }
       
        return listaProdutos;
    }
 


Onde,
(Urls.webserviceTodosProduto

é uma constante do tipo:

static String webserviceTodosProduto = "http://000.000.0.000:9999/webservice/produto/todos";


Até aqui, tudo ótimo.
O problema começa quando eu tenho um Array, montado, e preciso enviá-lo por meio de Webservice

Até tentei, mas não funcionou
Abaixo o método que recebe esse Array;

@POST
    @Consumes("application/json")
    @Produces("text/plain")
    @Path("/recebe")
    public String recebeListaItens(List<Itens> listaItens){
       
        System.out.println("Array tamanho " + listaItens.size());//Só um exemplo
       
        return "";
       
    }
 


Minhas 2 perguntas fundamentais:

1) Como é a forma correta de se montar o método que RECEBE desse Array

2) No Android, como eu faço pra enviar, considerando a URL que eu devo passar.
Abaixo o método que faz o envio do Android, mas acho que não está muito certo...


Gson gson = new Gson();
               
                String arrayItens = gson.toJson(listaItens);
 


Preciso de ajuda...
Obrigado!

_________________
Marcos Roberto da Fonseca
Desenvolvimento de software

Maiores informações:
http://zipersoft.com.br e tem também nosso blog: http://zipersoft.com.br/blog


25 Ago 2011, 17:46
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] Webservice com jSON completo.
Como eu falei, é meio complicado tratar listas com essa api.

Tenta fazer da mesma forma que vc usou em cima. Trabalha com a lista dentro de uma string.

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??


29 Ago 2011, 15:35
Perfil WWW
Anatomy of an App
Anatomy of an App

Data de registro: 12 Mar 2011, 13:32
Mensagens: 109
Mensagem Re: [ARTIGO] Webservice com jSON completo.
poderia me dar um exemplo de como passar essa String de dados para o WS?

_________________
Marcos Roberto da Fonseca
Desenvolvimento de software

Maiores informações:
http://zipersoft.com.br e tem também nosso blog: http://zipersoft.com.br/blog


29 Ago 2011, 15:57
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] Webservice com jSON completo.
Já dei um exemplo desse, mas vai de novo!!

Aqui vc envia sua lista como string:


Gson gson = new Gson();
String jsonLista = gson.toJson(listaItens); //aqui vc cria o seu JSON

StringEntity sEntity = new StringEntity(jsonLista, "UTF-8"); //aqui vc cria a sua StringEntity pra ser colocada no seu httpPost

DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost("http://suaURL");

httpPost.setEntity(sEntity); //aqui vc coloca o seu objeto no httpPost

HttpResponse response = httpclient.execute(httpPost);
 


Aí no WS vc faz assim:

    @POST
    @Consumes("application/json")
    @Produces("text/plain") // isso aqui é só se vc quer devolver alguma coisa pro android, mas vc vai ter que mudar o tipo ali no método e mudar o retorno.
    @Path("/recebe")
    public List<Itens> recebeListaItens(String recebido){

       List<Itens> listaItens = new ArrayList<Itens>();
        Gson gson = new Gson();
            JsonParser parser = new JsonParser();
            JsonArray array = parser.parse(recebido).getAsJsonArray();
           
            for(int i=0; i<array.size(); i++){
                listaItens.add(gson.fromJson(array.get(i), Itens.class));
            }
        return listaItens;
    }
 


Agora vc tem que moldá-lo pro que vc quer, mas a ideia é essa ae!!

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??


29 Ago 2011, 19:01
Perfil WWW
Mostrar mensagens anteriores:  Organizar por  
Responder Tópico   [ 154 Mensagens ]  Ir para a página 1, 2, 3, 4  Próximo

Quem está online

Usuários vendo este fórum: afpcp, alex, alexandreizumi, Alexsandro Tirloni, alfredo_ej, anaguerra, andepunk, Andrey, boydivalor, btleandro, caio, caiodemarco, Cajux, caliow, cariabs8, cehills, cenatech, Chanceler Supremo Finis Valorum, Christiane, CKorneLL, criscmaia, Damiani Oliveira, Daniel Batista, danielbfranco, deivisonrpg, developermaster, Diego Otani, Dudi_FC, edsonel, Eduardo - Brasil, euguns, fabiano_eletro, fabielp, fabrizior, Felipe Ferreira, Felipe Marcondes, FelipeOliveira, Fernando Cardia, fernandofsf, ffardo, fracon, fraga, FVB, gabrielatme, Geire Robson Gadelha, Google Desktop, Governador Wilhuff Tarkin, guilhermesmo, gutem25, HAMSES, hbarroco, hellbest, hugomarinho, ijsilvestre, iuri_freire, Jaison, Jar Jar Binks, jijo, joaquimfoto, juliaojunior, Juliobcosta, Juninhooooo, Ki-Adi-Mundi, klassmann, klebersilvarocha, kristopher, lfirpo, lillian.brandao, lucastgomes, lucianoalves, luizcesar, luizcyber, m4v0, maolveira, Marcelo, marcelosv, martins, Matheus562, mauriciomag, memnoch, monteirojp, mvoto, navegador, neiesc, neosun, nirvana, nrsf, pabarbosa, pamonteiro, phobos, pomarolli, Rafael Alencar, rafaelvital, renata, rerp7, ricardo, ricardo_listadelphi, rlecheta, robertofonte, Robson Florentino, Rodrigo, ruizsa, samuel.cavanieri, Samuka, sergio, SidneiCP, silvio.carlos, slackware, srsilveira, Synoo [Bot], tassiovirginio, tavares767, Thelemita, thiago20, tiagofalcao, tiasousa, tonholis, vanmars, viniciusllima, weber, wesley.messias, wylken, Yoda, zorba e 1 visitante


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