Sincronização de Dados Webservice e SQLITE

134 views
Skip to first unread message

Fernando Antunes

unread,
Oct 4, 2017, 9:20:43 AM10/4/17
to Android Brasil - Dev
Salve Salve Galera!!!

Tenho um aplicativo que trabalha com webservice para leitura de dados, utilizo a Volley para consultar no webservice e assim buscar o JSON, com este JSON eu coloco os dados em uma listview e pronto.

Situações:

A. Preciso colocar o aplicativo para ler estes dados quando estiver offline. (Já implementei o SQLITE que faz as operações padrões). - É apenas leitura do WS para Android, não tem inserção do Android para o WS.

B. Preciso sincronizar os dados, exemplo: Estou offline, navego normalmente usando as consultas no SQLITE, quando ficar online, ele verifica se tem novos dados ou se algum dado foi alterado, se sim, ele atualiza os dados na tabela do SQL.

PROBLEMA A SER SOLUCIONADO: 

Como faço a sincronização de offline com onlline?

Ele precisa carregar os dados e salvar no SQLITE apenas se foi alterado alguma coisa ou se inseriu algo novo.

TENTATIVA: Eu coloquei o SQLITE, mas sempre que ele abria o aplicativo ele gravava um novo registro, assim duplicando vários registros, em pesquisas eu encontrei o BroadcastReceiver para verificar quando tem internet ou não.

Como faço essa lógica de carregar os dados e atualizar nas tabelas apenas se foi alterado algo, se eu colocar para atualizar sempre que estiver com internet ai complica, se alguém já passou por isso e tem uma rotina de sincronização e gostaria de compartilhar ficaria muito grato, abraços.


thiagolopes silva

unread,
Oct 4, 2017, 9:33:16 AM10/4/17
to Android Brasil - Dev
Bom dia.

             Talvez o SyncAdapter seja o que você esteja procurando. Da uma olhada neste link aqui . Recomendo também baixar o programa slack e entrar no canal androiddevbr para tirar dúvidas. 

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
--

Thiago Lopes da SIlva
Recife-Pe

Skype: thiagoolsilva


Graduado em ciência da computação - FAPE
Especialização em dispositivos móveis - C.E.S.A.R. E.D.U./Samsung
Especialização em dispositivos móveis - C.E.S.A.R. E.D.U.

Engenheiro de Sistemas - C.E.S.A.R.


"O rio corta a rocha não por causa de sua força, mas por causa de sua persistência"
                                                                                                        (Jim Watkins

Fernando Pereira

unread,
Oct 4, 2017, 9:33:21 AM10/4/17
to androidb...@googlegroups.com
Bom dia.

Eu tenho um aplicativo que faz algo neste sentido.

Detalhes da minha rotina:

  1. Existe um campo Chave Primária para cada registro
  2. Primeiro eu busco um WS com todos os registros, e apenas duas informações: ID_REG (chave primaria) e NR_VERSAO (numero da versão, que é incrementada cada vez que é feita alguma alteração na nuvem. Ex: "id_reg": 1001, "nr_versao": 5
  3.  No aplicativo android, eu "varro" todos os registros, e trabalho apenas quando é NOVO ou com VERSÃO DIFERENTE;
  4. Quando é novo (EOF no SQLite), eu uso INSERT. Quando não é novo, e a versão é diferente, uso UPDATE. os demais registros são desprezados.

Não sei se é a melhor solução, mas para minha aplicação ficou bem rápido o processo.

Espero que ajude.


Em 04/10/2017 10:20, Fernando Antunes escreveu:
Salve Salve Galera!!!

Tenho um aplicativo que trabalha com webservice para leitura de dados, utilizo a Volley para consultar no webservice e assim buscar o JSON, com este JSON eu coloco os dados em uma listview e pronto.

Situações:

A. Preciso colocar o aplicativo para ler estes dados quando estiver offline. (Já implementei o SQLITE que faz as operações padrões). - É apenas leitura do WS para Android, não tem inserção do Android para o WS.

B. Preciso sincronizar os dados, exemplo: Estou offline, navego normalmente usando as consultas no SQLITE, quando ficar online, ele verifica se tem novos dados ou se algum dado foi alterado, se sim, ele atualiza os dados na tabela do SQL.

PROBLEMA A SER SOLUCIONADO: 

Como faço a sincronização de offline com onlline?

Ele precisa carregar os dados e salvar no SQLITE apenas se foi alterado alguma coisa ou se inseriu algo novo.

TENTATIVA: Eu coloquei o SQLITE, mas sempre que ele abria o aplicativo ele gravava um novo registro, assim duplicando vários registros, em pesquisas eu encontrei o BroadcastReceiver para verificar quando tem internet ou não.

Como faço essa lógica de carregar os dados e atualizar nas tabelas apenas se foi alterado algo, se eu colocar para atualizar sempre que estiver com internet ai complica, se alguém já passou por isso e tem uma rotina de sincronização e gostaria de compartilhar ficaria muito grato, abraços.


--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Livre de vírus. www.avg.com.

Willian do Amor

unread,
Oct 4, 2017, 9:34:58 AM10/4/17
to androidb...@googlegroups.com
Ao meu ver você pode fazer de duas maneiras. 

1 - deixe a opção de sincronizar para o usuário.

2 - criar um parâmetro onde o usuário configura se ele quer auto sincronizar ao abrir o aplicativo.

Aqui eu uso a primeira opção.

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.

Jonathans Coelho

unread,
Oct 4, 2017, 9:41:52 AM10/4/17
to androidb...@googlegroups.com
Não sei qual seu contexto mas Uma opção é fazer o Servidor avisar quando houver atualizações de dados, através de um Push.
--
Att.

Jonathan Coelho
Arquiteto de Sistemas 
Contato:(61) 94008652

Fernando Antunes

unread,
Oct 4, 2017, 9:46:02 AM10/4/17
to Android Brasil - Dev
Opa Bacana Chará!!!

Esta rotina fica bem robusta, eu até pensei desta forma e coloquei uma coluna chamada sync na tabela, como 0 ou 1, ai ele verificar se foi sincronizado.

Utilizando o SQLITE como ficaria esta verificação de insert ou update?

Iniciei a pouco tempo e ainda tenho apanhado hehe, eu faria a verificação em cada FRAGMENT que o app acessa?

Por exemplo ele vai acessar a fragment que listar os veiculos, ali ele verifica e faz o insert ou update? depois ele acessa a fragment listar cores e assim faz o mesmo processo?

Não tem como fazer tudo em uma classe só?

Exemplo, ele abre o aplicativo e cria as tabelas todas, busca os dados no WS e faz os insert.

Depois quando o usuário abrir o APP novamente ele já lê do SQLITE, se tiver alguma tabela alterada, ai ele roda a rotina que atualiza as tabelas.

Pensei em algo desta forma, não sei se usa também assim, se tiver algum pedaço de codigo para mostrar, eu entendo mais codificando kkkkkk.. vlwww abraços..

Fernando Antunes

unread,
Oct 4, 2017, 9:46:34 AM10/4/17
to Android Brasil - Dev
Bacana, vou verificar sobre o SyncAdapter... vlwss

Fernando Pereira

unread,
Oct 4, 2017, 10:19:00 AM10/4/17
to androidb...@googlegroups.com
Bem,  
Outro detalhe que não havia mencionado: A rotina de "cutucar" o WS para saber se tem atualizações é feita apenas uma vez por dia.
Ou seja:
Assim que o APP é iniciado
Se estiver offline, não faz nada
Se estiver online, verifica a data atual e compara com o string gravado no app. Ex: data de hoje: "20171004". data gravada: "20171002".
Se for igual, quer dizer que já foi feita a rotina hoje, então não faz nada.
Se for diferente (como no exemplo), executa a rotina em assynctask, e em seguida grava a informacao da data atual ("20171004").

Assim fica bem prático para minha necessidade, pois não exige que a pesquisa seja feita a cada utilização. Dá para adaptar para que seja feita uma vez a cada dois dias, por exemplo.

Se quiser baixar o app, para ver o funcionamento, é o: https://play.google.com/store/apps/details?id=br.com.enfatec.disk3000

Vou procurar o código, e depois de envio.

To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.

Fernando Antunes

unread,
Oct 4, 2017, 10:33:43 AM10/4/17
to Android Brasil - Dev
Bacana Chefe!

Vou ver aqui e adaptar, baixando o app para dar aquela força, abraços.

Duanniston Cardoso Cabral

unread,
Oct 15, 2017, 2:25:23 PM10/15/17
to androidb...@googlegroups.com
Leia isso, https://firebase.googleblog.com/2017/10/introducing-cloud-firestore.html

https://socket.io/

Talvez essas tecnologias te ajudem a resolver os problemas.

To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages