Volley no Android, Entendendo e Utilizando

Receba em primeira mão, e com prioridade, os conteúdos Android exclusivos do Blog. Você receberá um email de confirmação. Somente depois de confirma-lo é que poderei lhe enviar os conteúdos exclusivos.

Email inválido.
Blog /Android /Volley no Android, Entendendo e Utilizando

Volley no Android, Entendendo e Utilizando

Vinícius Thiengo
(15540) (70) (1)
Go-ahead
"A única coisa pior do que não ler um livro nos últimos noventa dias é não está lendo um livro nos últimos noventa dias e pensar que isso não importa."
Jim Rohn
Kotlin Android
Capa do livro Desenvolvedor Kotlin Android - Bibliotecas para o dia a dia
TítuloDesenvolvedor Kotlin Android - Bibliotecas para o dia a dia
CategoriasAndroid, Kotlin
AutorVinícius Thiengo
Edição
Capítulos19
Páginas1035
Acessar Livro
Treinamento Oficial
Android: Prototipagem Profissional de Aplicativos
CursoAndroid: Prototipagem Profissional de Aplicativos
CategoriaAndroid
InstrutorVinícius Thiengo
NívelTodos os níveis
Vídeo aulas186
PlataformaUdemy
Acessar Curso
Receitas Android
Capa do livro Receitas Para Desenvolvedores Android
TítuloReceitas Para Desenvolvedores Android
CategoriaDesenvolvimento Android
AutorVinícius Thiengo
Edição
Ano2017
Capítulos20
Páginas936
Acessar Livro
Código Limpo
Capa do livro Refatorando Para Programas Limpos
TítuloRefatorando Para Programas Limpos
CategoriaEngenharia de Software
AutorVinícius Thiengo
Edição
Ano2017
Capítulos46
Páginas599
Acessar Livro
Quer aprender a programar para Android? Acesse abaixo o curso gratuito no Blog.
Conteúdo Exclusivo
Receba em primeira mão, e com prioridade, os conteúdos Android exclusivos do Blog.
Email inválido

Abaixo o link do vídeo de apresentação da lib Volley no Google I/O 2013

https://www.youtube.com/watch?v=yhv8l9F44qo

Opa! Blz?

Nesse vídeo mostro como baixar e utilizar a lib Volley do Android, desenvolvida pela Google e utilizada para manter as conexões Web mais simples e rápidas a lib Volley veio para evitar o trabalho as vezes ineficiente com org.apache e AsyncTask, por exemplo. Além de evitar um caminhão de código para conseguirmos simples conexões a lib Volley também tem recurso para carregamento de Imagem que é todo encapsulado, novamente sem a necessidade de abrirmos Threads secundárias e fazermos o cache da imagem na mão. A parte que achei ruim foi para enviar dados das requisições que utilizam o JSON (JsonObjectRequest e JsonObjectArray), mesmo sendo melhor aproveitada ainda do que o uso de AsyncTask e cia, o formato de envio de dados das chamadas JSON não acompanham o formato da chamada que utiliza String, que é muito mais fácil de se utilizar necessitando apenas da sobres escrita de um único método.

Nesse vídeo eu dou inicio a série de vídeos sobre a lib Volley e já lhe recomendo migrar para ela, pois, como falei no vídeo, é a forma mais rápida de se trabalhar network no Android, dito também no vídeo de apresentação da lib no Google I/O 2013. Então é isso, vou evitar mais delongas e deixar você assistir ao vídeo.

O link para download do projeto se encontra logo abaixo do post.

Segue link do post sobre onConfigChanges:

Entendendo e Utilizando o ConfigChanges no Android

Segue links das págins apresentadas no vídeo:

Página de downloads do Git

Página do link da lib Volley no Google Source

Vlw

Receba em primeira mão, e com prioridade, os conteúdos Android exclusivos do Blog.
Email inválido

Relacionado

LinkedIn Login com SocialAuth Library no AndroidLinkedIn Login com SocialAuth Library no AndroidAndroid
Obtendo Conexões do LinkedIn com SocialAuth no AndroidObtendo Conexões do LinkedIn com SocialAuth no AndroidAndroid
Publicando no LinkedIn com SocialAuth no AndroidPublicando no LinkedIn com SocialAuth no AndroidAndroid
Mostrando Feeds e Dados Profissionais do LinkedIn com SocialAuth no AndroidMostrando Feeds e Dados Profissionais do LinkedIn com SocialAuth no AndroidAndroid

Compartilhar

Comentários Facebook (25)

Comentários Blog (45)

Para código / script, coloque entre [code] e [/code] para receber marcação especifica.
Forneça seu nome válido.
Forneça seu email válido.
Forneça o comentário.
Enviando, aguarde...
Robson (1) (1)
16/08/2017
Olá Thiengo! prezado vc demonstrou e disse o motivo pelo qual os parâmetros não são enviados com Request<JSONObject>, estou fazendo uso da classe customizada e mesmo assim os parâmetros não são enviados, para testar forço e coloco os parâmetros na url então consigo fazer funcionar , como resolver este tilte? Valeu meu caro.
Responder
Vinícius Thiengo (0) (0)
20/08/2017
Robson, tudo bem?

Tem um tempo que não mais trabalho com essa API, mas tenho aqui no Blog um conteúdo mais atual sobre ela, se possível veja ele em: https://www.thiengo.com.br/volley-gson-e-retrypolicy-em-material-design-android-serie-app

Também recomendo que tente outras APIs de conexão remota, pois se me lembro bem a API Volley não mais é mantida.

Duas outras excelentes APIs são:

- Retrofit (a mais utilizada no Android): https://www.thiengo.com.br/library-retrofit-2-no-android
- AsyncHttp (robusta e simples): http://loopj.com/android-async-http/

Abraço.
Responder
Rodrigo Pereira (1) (0)
15/05/2017
Thiengo parabéns pelos videos, me ajudam muito, sempre pesquiso aqui o que preciso e sempre indico suas aulas para outras pessoas.
Estou com um problema, sempre que envio uma requisição para o banco ele me da o retorno duas vezes, já configurei meu retryPolice e nada ( cr.setRetryPolicy(new DefaultRetryPolicy(30000,
                0,
                DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));

Insert por exemplo, ele dá 2 vezes...

O que pode ser?

Abraços.
Responder
Vinícius Thiengo (0) (0)
24/05/2017
Rodrigo, tudo bem?

Esse problema de duplicação de registro no backend tende a ser devido a configuração do retryPolice. Tentou somente essa configuração de 30 segundos?

Na pior das hipóteses você terá de construir um código de guarda no backend Web. Assim é possível que, na tabela onde está havendo duplicação, você tenha de criar mais um index, chave única, por exemplo, para poder saber que o segundo conjunto de dados na verdade já foi inserido.

Mas antes tente mais configurações do retryPolice. Abraço.
Responder
Matheus Bed (1) (0)
30/12/2015
Ei thiengo, estou com problema pra importar o volley para o android studio, eu vi que o procedimento que você faz é diferente no android studio e já procurei outros videos e também não achei a resposta, se você poder mim ajudar, ficarei feliz
Responder
Vinícius Thiengo (0) (0)
30/12/2015
Fala Matheus, blz?
Se for manter seu APP com o Volley, veja essa implementação no AS (http://www.thiengo.com.br/volley-gson-e-retrypolicy-em-material-design-android-serie-app ).

Mas recomendo que ao menos tente o Retrofit 2.0 (http://www.thiengo.com.br/library-retrofit-2-no-android ), mais eficiente e simples de utilizar. Abraço
Responder
Andreia (1) (0)
06/11/2015
Olá Vinicius. Desde já parabéns pelo blog, todos os post, etc. Enfim, gostaria de saber por quê não consigo importar "RequestQueue"?!! Importei o Volley, habilitei Library, depois no projeto de exemplo add library(que apareceu como main, invés de volley), mas na hora que começo "private RequestQueue rq", não aparece a opção para importar. E se coloco o import manual continua ainda errado. Sabe por que isso ocorre?!Aguardo.
Responder
Vinícius Thiengo (0) (0)
07/11/2015
Fala Andreia, blz?
Está com o AndroidStudio ou Eclipse? Qual a versão da API Android utilizada e a do volley? Estude a possibilidade de utilizar o Retrofit 2.0 (http://www.thiengo.com.br/library-retrofit-2-no-android ), mais simples e eficiente. Abraço
Responder
Andreia (1) (0)
09/11/2015
Olá Vinicius, blz?! Estou usando o Eclipse, a versão do API é 15. Vou ver seu post sobre Retrofit, caso resolver ou não, retorno. Obrigada. Sucesso!
Responder
Vinícius Thiengo (0) (0)
09/11/2015
Ok, veja se consegue utilizar o gradle no eclipse seguindo esse tuto (http://www.vogella.com/tutorials/EclipseGradle/article.html ), caso já não esteja utilizando. Abraço
Responder
Andreia (1) (0)
09/11/2015
Ok, Vinicius! Valeu!!
Obrigada!!
Responder
Andreia (1) (0)
11/12/2015
Olá Vinicius, tudo bem?!
Resolvido da seguinte forma: feito download do "volley.jar" do site: http://tips.androidhive.info/2015/08/android-how-to-download-and-make-volley-jar/. E colocado na pasta libs do projeto, agora sim funcionou!
Responder
Flávio (1) (0)
20/08/2015
Olá Thiengo, desde já agradeço seus ótimos vídeos, tenho um problema com o Volley sempre dá "time out error", já fiz de tudo , inclusive mexendo no DefaultRetryPolicy (inclusive desabilitando o Firewall) e instalando diretor em um celular real. Veja por favor o exemplo abaixo, será que existe um bug no Volley ?? jor.setRetryPolicy(new DefaultRetryPolicy(
5000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
Responder
Vinícius Thiengo (0) (0)
20/08/2015
Fala Flávio, blz?
Pode ser que o problema seja no lado servidor, aumente o time out no servidor e tente novamente. Esse problema acontece mesmo quando utilizando WiFi? Abraço
Responder
Gabriel (1) (0)
13/08/2015
Thiengo, parabéns pelo vídeo!

Sabe me dizer como eu faço uma simulação com servidor local?

Instalei o wampserver e tentei chamar localhost, mas ouvi dizer que este é o mesmo endereço do Android.
Já tentei dar um ipconfig e apontar para o ip da máquina, mas uma hora identifica, outra hora não.. e não sei em qual diretório poderia colocar os arquivos php e fazê-los rodar como vc fez.. estou muito confuso com isso, poderia me dar uma luz?!? Obrigado!
Responder
Vinícius Thiengo (0) (0)
14/08/2015
Fala Gabriel, blz?
O diretório onde seu projeto Web deve ficar é exatamente no diretório onde o apache interpreta seus códigos Web, provavelmente na pasta www de sua instalação WampServer, isso não muda somente pq envolve um dev mobile tb, continua o mesmo de sempre. Realmente é o IP de sua máquina que deve ser utilizado, logo "mas uma hora identifica, outra hora não" infelizmente acontece, mas está no caminho correto. Está utilizando o Genymotion? Se não, instale ele e o utilize, além de aumentar sua produção no dev Android, vc provavelmente não terá esse problema de queda na conexão com server local (não tive em minha máquina). Abraço
Responder
Gabriel (1) (0)
14/08/2015
Obrigado pelo retorno Thiengo,
eu utilizo o Genymotion sim, então eu devo colocar o ip da máquina no browser do emulador, correto?

O que estou mais confuso é que se eu entrar com o endereço ip na janela do windows não terá como salvar arquivos, apenas compartilhar diretório.. como ele enviará para o www do php?? Como ficaria o link na variável "url" do Android?!!
Responder
Vinícius Thiengo (0) (0)
15/08/2015
Gabriel, na verdade no browser vc continua utilizando localhost. No site do WampServer (http://www.wampserver.com/en/ ), na parte "Installing" tem os procedimentos de instalação e de como vc vai acessar seus projetos, onde eles vão ficar para poderem ser acessados do browser ou de outra aplicação cliente. Reveja aqueles passos e faça um "Hello World!" somente para testes. O endereço ip será utilizado nos scripts do seu Android Project, para sua APP conseguir acessar seu servidor local como se fosse um servidor publico na Web, somente para isso servirá o endereço ip. Veja nesse vídeo http://www.thiengo.com.br/volley-gson-e-retrypolicy-em-material-design-android-serie-appcomo faço. Abraço
Responder
29/07/2015
Fala Thiengo, blz?
Cara, me deparei com um problema de instabilidade no volley.Pensei que fosse problema no servlet, porém fiz a mesma requisição via http e tá rodando normal.Via volley tenho que chamar 2 ou 3 vezes até a requisição retornar true.
Tem alguma idéia do que possa tá ocorrendo?
Obrigado.
Responder
Vinícius Thiengo (0) (0)
30/07/2015
Fala Hemerson, blz sim.
Provavelmente seu problema é com o RetryPolicy, não é instabilidade, é a configuração padrão que assume uma resposta rápida do servidor. Veja esse ultimo vídeo que coloquei no ar (http://www.thiengo.com.br/volley-gson-e-retrypolicy-em-material-design-android-serie-app ), nele apresento essa problemática e como alterar os valores do RetryPolicy. Abraço
Responder
Ilton Barbosa (1) (0)
04/07/2015
Olá,
Consegui fazer funcionar colocando o acesso no XAMP instalado na minha própria máquina. Ele gerou os arquivos txt, no entanto exibiu na tela do emulador, uma mensagem de Ecache null. De que se trata?
Responder
Vinícius Thiengo (0) (0)
05/07/2015
Fala Ilton. blz?
Essa mensagem aparece com frequencia somente para sua APP que utiliza o Volley? Pois não encontrei nada relacionado a ela e ao Volley / Android, provavelmente é uma mensagem independente do próprio emulador. É o Genymotion? Abraço
Responder
thierrykaueas (1) (0)
19/06/2015
Olá, sempre ao executar a aplicação no meu celular da erro, tanto o meu APP quanto o seu exemplo, apresenta o seguinte erro:  java.io.EOFExeption, e a classe q da erro é com.volley.Android.noConnectionError
Responder
Vinícius Thiengo (0) (0)
20/06/2015
Fala Thierry, blz?
Está realizando quantas conexões ao mesmo tempo no Volley? Pergunto isso que pelas pesquisa que fiz mt provavelmente o problema é a quantidade de requisições simultaneas (http://www.discogs.com/forum/thread/401761 ). Certificando-se tb que a Internet está disponível, dê uma olhada nesse doc do Volley (https://github.com/smanikandan14/Volley-demo ), vai lhe ajudar a entender a configuração do Volley e como altera-la.

Nesse outro post (http://stackoverflow.com/questions/18686671/com-android-volley-noconnectionerror-after-pausing-app ) os participantes chegaram ao problema indicando bug no Android, e lá mesmo tem a solução. Veja tb se funciona para ti. Abraço
Responder
16/06/2015
Fala Thiengo, blz?
Como faço uma segunda chamada dentro do meu  onResponse?
Obrigado.
Responder
Vinícius Thiengo (1) (0)
17/06/2015
Fala Hemerson, blz sim.
Tentou dentro do onResponse() chamar novamento o:

mRequestQueue.add(request);

Ele já está dentro da mesma Thread da chamada anterior então não vejo problemas com isso, tente assim e ver se passa. Abraço
Responder
17/06/2015
Estou fazendo da seguinte forma e não está dando certo.
Tenho que criar no novo objeto CustomJsonObjectRequest?

cjor = new CustomJsonObjectRequest(Request.Method.POST, url, params, new Response.Listener<JSONObject>() {
            @Override
                public void onResponse(JSONObject jsonObject) {
                if (jsonObject != null) {
                   nova url;
                   novos parametro;
                   requestQueue.add(cjor);
                }
            
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {
                Toast.makeText(ctx, "Falha na Comunicacao --- >Erro " + volleyError.getMessage(), Toast.LENGTH_LONG).show();
                dialogProgress.dismiss();
            }
        });
        requestQueue.add(cjor);
    }
Responder
Vinícius Thiengo (1) (0)
18/06/2015
Hemerson, provavelmente é isso mesmo, não ter como aproveitar um objeto request já utilizado, então crie outro e tente realizar a chamada no mesmo local, para ver se vai. Abraço
Responder
05/06/2015
vou postar o erro do log

/bin/surfaceflinger
06-05 10:11:38.170: E/(5629): appName=br.exemplovolleyandroid, acAppName=/system/bin/surfaceflinger
06-05 10:11:38.170: E/(5629): 0
06-05 10:11:38.765: E/Volley(5629): [349] NetworkDispatcher.run: Unhandled exception java.lang.NullPointerException
06-05 10:11:38.765: E/Volley(5629): java.lang.NullPointerException
06-05 10:11:38.765: E/Volley(5629): at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:126)
Responder
Vinícius Thiengo (0) (0)
06/06/2015
Esse NullPointer interno a lib não ajudou muito, pois o ponto de partida da Exception é a chamada em sua APP (em alguma classe de sua APP), mas se isso foi o mais descritivo que conseguiu do LogCat provavelmente o erro é devido a outra entidade que vc disse não ter vindo igual no vídeo. Me diz se já consegue vincular o Volley ao projeto e colocar o código dele? Se sim, utilize a requisição com StringRequest para ver se vai sem problemas. Se não, vc tentou o .jar do comentário anterior que lhe enviei? Abraço
Responder
lazaro19p (1) (0)
04/06/2015
mestre thiengo cara estou tentando usar o volley, mais infelismente  o projeto q o hit gera quando importo pelo eclipse só aparece um main em vez dos DOI projetos q vc demostrou o que tenho fazer?
obrigado
Responder
Vinícius Thiengo (0) (0)
05/06/2015
Fala Lazaro, blz?
Tente baixando o jar desse repositório: http://search.maven.org/#search%7Cga%7C1%7Ccom.mcxiaoke.volley

Se colocando o .jar direto em seu projeto não rodar, tente colocando ele em uma projeto do tipo lib como é feito no feito e esplicado na resposta certa desse link (http://stackoverflow.com/questions/27578105/cant-import-the-volley-library-in-eclipse ) em Edit. Abraço
Responder
Paul Polidoro (2) (0)
29/05/2015
Bom dia Thiengo, tenho uma duvida espero que possa me ajudar.

Tem como receber dois ou mais JSONArrays do php em uma única solicitação?
Responder
Vinícius Thiengo (1) (0)
30/05/2015
Fala Paul, blz?
Tem como sim, uma maneira fácil de fazer isso e entender é colocar quantos JSONArray necessários dentro de um JSONArray pai ou JSONObject pai. Abraço
Responder
Paul Polidoro (1) (0)
01/06/2015
Beleza Vinícius!
Cara deu certinho, eu usei um JSONObject com vários Arrays dentro, da pra transportar todos os dados que eu precisava! Valeu pela atenção abraços.
Responder
24/02/2015
Fala Thiengo blz,
Estou usando o Android Studio e está sendo um parto incluir o volley. Em versões do android Studio era uma forma agora é de outra. Não vi nenhum modo de incluir os arquivos baixados no projeto e usá-los. O único modo que encontrei foi baixar o .jar do arquivo e incluí-los no projeto. Aí é bem fácil basta colocar o .jar em uma pasta do projeto(lib talvez) e clicar em Add  as Library e sair usando. Mas há uma preocupação aqui em saber se o .jar que estou usando é a mais atual. Pois baixar a partir de um link que não tem nada a ver com o google. Agora a dúvida: Já que só encontrei essa opção como criar um arquivo "volley.jar" a partir dos arquivos baixados diretamente do google source?.
Responder
Vinícius Thiengo (1) (0)
24/02/2015
Fala Davi, blz sim.
Coloque a linha abaixo no build.graddle, em "dependencies", de seu projeto para incluir o volley lib mais atual nele, abraço:

'com.mcxiaoke.volley:library:1.0.10@aar'
Responder
Vinícius Thiengo (1) (0)
24/02/2015
Exemplo mais completo:
...
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.3'
    compile 'com.mcxiaoke.volley:library:1.0.10@aar'
}
Responder
20/12/2014
Vinícius Thiengo  thiengo valeu mesmo... pensei bem acho que vou comecar a mudança aos poucos , mas vou mudar... so uma duvida a lib do volley esta sendo atualizada constantemente ou eu posso usar a que voce disponibilizou no download do projeto ??
Responder
Vinícius Thiengo (0) (0)
21/12/2014
Paulo, não tive problemas e requisições de atualizações para essa lib não, porém recomendo que pega direto do site informado no vídeo, pois se algo foi corrigido ou melhorado vc já estará com essa versão. Abraço
Responder
11/08/2014
Olá Thiengo.
Criei um projeto com o Volley e gostaria de enviar requisições POST para o Web Service. Para isto, estou pegando uma lista de objetos e adicionado a requisição a cada interação da lista.
O problema é que ele passa por toda a lista e só depois começa a disparar os POSTs. Portanto ele envia N requisições, todas com o último objeto da lista e não um com cada.

Você já passou por isso? Tem alguma ideia para me ajudar?

Obrigado.
Responder
Vinícius Thiengo (1) (0)
11/08/2014
Fala Matheus, blz?
Velho nunca passeis por esse problema em especifico, mas pelo que vc falou o problema é de lógica (o pior tipo), alguma condicional ou loop em falta ou a mais. O problema vc já tem (somente o ultimo da lista vai na requisição) agora vc deve achar a causa na lógica. Abraço
Responder
12/08/2014
Ahh blz Thiengo.
E você sabe se tem como dar prioridade e/ou travar o envio de uma requisição com o Volley?
Responder
Vinícius Thiengo (1) (0)
12/08/2014
Fala Matheus, blz?
Tem sim, se não me engano a parte de prioridade o vídeo cobre, porém a de cancelamento de requisição acho que passei batido e mostrei somente como taggear a requisição e acabei não cancelando. Pegando carona no vídeo até o momento em que taggeo a requisição (request.setTag("tag");) vc pode cancelar a requisição de várias formas, a que tenho certeza é:

requestQueue.cancelAll("tag");

Abraço
Responder
13/08/2014
Então Thiengo.
Tinha pensado em ir dando prioridade maior para as primeiras interações da lista.
Mas consegui resolver meu problema colocando o while dentro da resposta do Volley. Assim ele só continua interando quando obtém uma resposta.
Vlw, abraços!
Responder