Ver mensagens sem resposta | Ver tópicos ativos Hoje é 17 Nov 2019, 14:00



Responder Tópico  [ 154 Mensagens ]  Ir para a página Anterior  1, 2, 3, 4
 [ARTIGO] Webservice com jSON completo. 
Autor Mensagem
Google employee
Google employee
Avatar de usuário

Data de registro: 05 Abr 2011, 04:47
Mensagens: 1968
Localização: Rio de Janeiro
Mensagem Re: Re: [ARTIGO] Webservice com jSON completo.
marciofornari escreveu:
antunes escreveu:
marciofornari escreveu:
Boa Noite,
Estou com uma dúvida aqui.

Eu fiz essa implementação, porém ele fica aparecendo SINCRONIZANDO COM O WEBSERVICE e fica processando, não saindo mais dessa parte.
Já dei o permisions INTERNET lá no androidmanifest

E o mais estranho é que no LogCat não aparece nenhum erro.
Eu fiz um system.out.println em algumas partes do código e vejo que ele passa essa parte thread.start(); e depois não vai mais pra lugar nenhum.
Se eu entrar pelo brownser do smartphone e digitar o endereco do webservice ele retorna a pagina corretamente.

      //Progresso por tempo indeterminado.
                pd = null;
                pd = ProgressDialog.show(ConexaoActivity.this,"Aguarde", "Sincronizando com WebService", true, false);
                //Inicia-se uma Thread para processar o webservice
                try{
                   
                    Thread thread = new Thread();
                    thread.start();
               //Até aqui ele passa, mas depois daqui não vai pra nenhum lugar.
                }catch (Exception e) {
                    pd.dismiss();
                    Log.e("WS", e.toString());
                }


Alguém saber porque ele não ta executando o metodo run()?


Faltou vc implementar o método run() dessa thread que vc instanciou.

Olha um exemplo de thread:

http://www.caelum.com.br/apostila-java- ... s-anonimas

Abraços!

Enviado de meu XT1058 usando Tapatalk


Antunes, na verdade eu não coloquei o método run() aqui no exemplo, mas minha Activity tinha sim.
O problema é que ele não entrava no método run(), depois que fazia o thread.start ele parava.

Então já consegui resolver o problema alterando

o código
Thread thread = new Thread();
para
Thread thread = new Thread(MinhaActivity.this);

Não sei exatamente porque não entrava no metodo run antes. Mas enfim agora ta beleza.

Só agora fiquei com uma dúvida, se eu quizer receber dois arrays no mesmo json é a forma mais correta?
por exemplo que vou conectar no meu webservice e quero buscar os Clientes, os Produtos, os Vendedores, cada um virá em um json assim:
{"clientes":[{"campo1":"valor1"},{"campo2":"valor2"},{"campo3":"valor3"}]}
{"produtos":[{"campoRet1":"valor1"},{"campoRet2":"valor2"},{"campoRet3":"valor3"}]}
{"vendedores":[{"campoRet1":"valor1"},{"campoRet2":"valor2"},{"campoRet3":"valor3"}]}


Como que ficaria essa parte?? eu teria que ter um metodo para cada Array?
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());
        }
    }
   
}




Marcio,

Foi mal não conseguir olhar antes. Conseguiu implementar??

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 Abr 2014, 16:01
Perfil WWW
Hello World!
Hello World!

Data de registro: 12 Mar 2014, 00:03
Mensagens: 25
Mensagem Re: Re: [ARTIGO] Webservice com jSON completo.
antunes escreveu:
marciofornari escreveu:
antunes escreveu:
marciofornari escreveu:
Boa Noite,
Estou com uma dúvida aqui.

Eu fiz essa implementação, porém ele fica aparecendo SINCRONIZANDO COM O WEBSERVICE e fica processando, não saindo mais dessa parte.
Já dei o permisions INTERNET lá no androidmanifest

E o mais estranho é que no LogCat não aparece nenhum erro.
Eu fiz um system.out.println em algumas partes do código e vejo que ele passa essa parte thread.start(); e depois não vai mais pra lugar nenhum.
Se eu entrar pelo brownser do smartphone e digitar o endereco do webservice ele retorna a pagina corretamente.

      //Progresso por tempo indeterminado.
                pd = null;
                pd = ProgressDialog.show(ConexaoActivity.this,"Aguarde", "Sincronizando com WebService", true, false);
                //Inicia-se uma Thread para processar o webservice
                try{
                   
                    Thread thread = new Thread();
                    thread.start();
               //Até aqui ele passa, mas depois daqui não vai pra nenhum lugar.
                }catch (Exception e) {
                    pd.dismiss();
                    Log.e("WS", e.toString());
                }


Alguém saber porque ele não ta executando o metodo run()?


Faltou vc implementar o método run() dessa thread que vc instanciou.

Olha um exemplo de thread:

http://www.caelum.com.br/apostila-java- ... s-anonimas

Abraços!

Enviado de meu XT1058 usando Tapatalk


Antunes, na verdade eu não coloquei o método run() aqui no exemplo, mas minha Activity tinha sim.
O problema é que ele não entrava no método run(), depois que fazia o thread.start ele parava.

Então já consegui resolver o problema alterando

o código
Thread thread = new Thread();
para
Thread thread = new Thread(MinhaActivity.this);

Não sei exatamente porque não entrava no metodo run antes. Mas enfim agora ta beleza.

Só agora fiquei com uma dúvida, se eu quizer receber dois arrays no mesmo json é a forma mais correta?
por exemplo que vou conectar no meu webservice e quero buscar os Clientes, os Produtos, os Vendedores, cada um virá em um json assim:
{"clientes":[{"campo1":"valor1"},{"campo2":"valor2"},{"campo3":"valor3"}]}
{"produtos":[{"campoRet1":"valor1"},{"campoRet2":"valor2"},{"campoRet3":"valor3"}]}
{"vendedores":[{"campoRet1":"valor1"},{"campoRet2":"valor2"},{"campoRet3":"valor3"}]}


Como que ficaria essa parte?? eu teria que ter um metodo para cada Array?
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());
        }
    }
   
}




Marcio,

Foi mal não conseguir olhar antes. Conseguiu implementar??

Abraços!



Sim Antunes

Então já consegui resolver o problema alterando

o código
Thread thread = new Thread();

para
Thread thread = new Thread(MinhaActivity.this);


29 Abr 2014, 16:08
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.
Maravilha!!

Qualquer coisa é 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??


29 Abr 2014, 21:23
Perfil WWW
What is a Activity?
What is a Activity?

Data de registro: 21 Mai 2014, 14:14
Mensagens: 16
Mensagem Re: [ARTIGO] Webservice com jSON completo.
GersonNovais escreveu:
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


Gerson estou fazendo um projetinho aqui e me baseei no seu para fazelo, ele não está rodando, eu queria saber se na hora de colocar o buffer eu devo deixar vazio ou preencher com algum parametro, (sou novo em json + android)


28 Mai 2014, 13:56
Perfil
Mostrar mensagens anteriores:  Organizar por  
Responder Tópico   [ 154 Mensagens ]  Ir para a página Anterior  1, 2, 3, 4

Quem está online

Usuários vendo este fórum: ac0502, adautox, afpcp, alex, Alexandre Castro, alexmarcolongo, Anakin Skywalker, Anderson.OL, antoniodourado, Aparec, apoena, arilsonm, arquivo51, avsouza, Biel, Biggs Darklighter, bigr ecreio, breko, bruno.abd, Brunohc, BTalhadas, btleandro, burujo, Carla Luz, cassiano, Cassius, cavenaghi, cfranca, Chefe Nass, Clauber, Comandante Cody, compto, cosmotheoro, Costa, cyzko, danilosv, dannieltec, Darth Sidious, Dassi, dchechetto, debal, developermaster, Diego Rufino, dnakamashi, dreyer, edlinux, edsonel, Eduardo - Brasil, fabiano_eletro, freina, germanno, Gomes, Google Android, Guilherme Cobain, gustavo, HAMSES, henrikesilva1, henrique.garcia, ICCrawler - ICjobs, inesfg, iuri_freire, ixian, jacard, jackdaniel, jacksaum, jackstuard, jacquesbica, JairoCN, jairodealmeida, Jar Jar Binks, Josinhaz, juliano, julianofischer, juliaojunior, juniorsk8, Knut, Kureiton, laucode, leonardodamata, LForce, lisbao, Liviosousa, lucasB, Marcelo Alves, Marcelo Lima, marcosandreao, marcosrogel, marcow, Marini, Marlosm, marlovich, Marlus Dias Silva, maurosilva, Mayara Trevisol, memnoch, Moisés Souto, mrangel, nandopierre, neosun, niloleite, nina.rm, nivaldo, nsansilva, Nute Gunray, Obi-Wan Kenobi, osternack, otpor, paint-horse, Patrick, Paulo, pemam.com.br, pererinha, Petto, pgbatera, phfmendes, pxcx, Qui-Gon Jinn, Rafael, Rafael Alencar, Rafael Felix, ramonrabello, Ranieri, rcotonet, rfrafa, ricardo_listadelphi, robertofonte, Robson Florentino, robsonrg, Rodrigo, rogeriopgomes, Romulo, Rubens Prates, ruizsa, schiroky, siker C3PO, SirBagda, srmoreira, Stryder, suportecr, taluna, teamamus, thiagoalgo, tiagocordeiro, ttaranto, waideman, wesley.messias 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