Qual melhor maneira de criar um app que funcione offline e sincronize dados com servidor? [fechada] – android mysql delphi

Pergunta:


Estou me aprofundando no mundo Mobile, onde tive o primeiro desafio, que é criar um App Android de cadastro básico, nome, idade, etc. O complicado (pelo menos pra mim) é que tenho que atualizar esses dados salvos no SQLite do Android para uma BD MySQL no servidor.

Estou utilizando a ferramenta RAD Studio XE8.

Alguém teria uma luz de como faço isso? Tenho que habilitar algum serviço por fora, ou deixar um aplicativo Windows rodando para fazer a integração?
O meu objetivo é realizar de uma maneira simples que, ao clicar em um botão sincronizar, o registro seja guardado no BD do servidor, e outro botão para limpar os dados.

Obrigado.

Autor da pergunta Pedro Santos

O método que eu sugiro é o seguinte. Supondo que você possa utilizar uma linguagem de scripts no seu servidor, primeiro carregue os dados do Banco Local na aplicação Delphi (Android).

Para prosseguir, adicione a biblioteca Indy HTTP e a Classes do sistema:

uses Classes, IdHTTP;

Crie as variáveis necessárias:

var 
    ParamList : TStringList; // Lista para representar o registro do banco
    MyRow     : TWhatever; // Esta variável hipotética representa o objeto ou array onde você terá o registro do Banco Local
    HTTP      : TIdHTTP; // Objeto HTTP do Indy

Coloque os dados que devem ser passados ao servidor (único registro de tabela) em um TStringList no formato padrão de URIs:

ParamList.Add('id=' + MyRow.ID);
ParamList.Add('name=' + MyRow.Nome);
ParamList.Add('phone_number=' + MyRow.PhoneNumber);
// Adicione todos os campos da tabela.

Após, você deve criar o objeto HTTP do Indy e realizar o POST para o Script no servidor:

HTTP := TIdHTTP.Create(nil);
try
    HTTP.Post('http://ip-ou-nome-do-servidor/pasta/do/script', ParamList);
finally
    HTTP.Free;
    ParamList.Free;
end;

O exemplo acima enviaria os dados Nome, Sobrenome e ID a um script no servidor (possivelmente em PHP ou outra linguagem que você prefira, conheça ou queira aprender). Este script por sua vez iria realizar as operações sobre o Banco Remoto (Servidor).

Este é claramente apenas um exemplo genérico e ilustrativo. Contém os conceitos base para o método.

Se não tiver conhecimento sobre algum dos termos acima, sugiro que estude:

  • HTTP
  • POST e GET
  • Scripts CGI

Você poderia usar a tecnologia DataSnap REST com uso de objetos em JSON da própria Embarcadero, que o mesmo faz as sincronizações entre Cliente/Servidor tornando o tempo de resposta muito mais rápido e o componente FireDac para fazer conexão com banco de dados para o Mobile Android e MySQL, a tecnologia já está pronta para funcionar em modo offline assim ela não ficaria o tempo todo online, somente quando for fazer uma sincronização. Se você não tem conhecimento sobre essa nova tecnologia sugiro que você dê uma olhada no tutorial que o Adriano Santos fez.

TDevRocks DataSnap REST

Na verdade, o que é difícil na sua pergunta é mais em relaçao às tantas formas que o Delphi permite fazer, que escolher a melhor depende realmente de cada particularidade.

Por exemplo, no delphi é muito simples conectar com DataSnap e tem um monte de tutoriais no YOUTUBE ensinando a implementar tanto o lado servidor como o cliente.
De uma estudada em JSON que,na minha opinião, é a melhor saída para a parte de envio de informações para o servidor.
Já para recuperar a informação, confie nos DatasetProvider–>ClientDataset

O Firedac também tem uma série de novidades, como por exemplo os componentes ETL, que permitem sincronizar tabelas de bancos de dados diferentes, e um recurso fatástico que talvez seja suficiente para ti: Trabalhar com o banco offline.

Eu recomendo os cursos do DEVMEDIA, especialmente do professor Guinter Pauling, especialista nestes assuntos.

Se voce tiver um servidor REST para consumir, ai o Delphi tem também excelentes controles de conexao, e eu recomendo começar pelo restDebuger, que vem com o delphi.

Fonte

Related Posts:

Qual a diferença entre AppCompatActivity e Activity? – android android-activity
Pergunta: Qual a diferença da AppCompatActivity para Activity ? A partir de qual versão a AppCompatActivity foi adicionada ao Android? Autor da pergunta Luhhh A diferença reside ...
Como abreviar palavras em PHP? – php string
Pergunta: Possuo informações comuns como nome de pessoas e endereços, e preciso que elas contenham no máximo 30 caracteres sem cortar palavras. Exemplo: 'Avenida Natalino João Brescansin' ...
Qual é a finalidade de um parêntese vazio numa declaração Lambda? – c# expressões-lambda característica-linguagem
Pergunta: Criei um exemplo de uma declaração Lambda sem argumentos, entretanto, estou com duvidas referente a omissão do parêntese vazio () na declaração. Veja o exemplo: class ...
Boas práticas para URI em API RESTful – api rest restful
Pergunta: Estou com dúvida em relação às URIs de alguns recursos da api que estou desenvolvendo. Tenho os recursos projetos e atividades com relação 1-N, ...
Dúvidas sobre a integração do MySQL com Java – java mysql netbeans
Pergunta: Estou criando um sistema no NetBeans, utilizando a linguagem Java e o banco de dados MySQL. Escrevi o seguinte código para realizar a conexão ...
Qual é a finalidade da pasta Model do framework Inphinit? – php inphinit
Pergunta: No Inphinit micro-framework existe a pasta Model que fica dentro da pasta application, e nela é onde ficam as classes, mas eu estou muito ...
Uso do ‘@’ em variáveis – javascript typescript coffeescript
Pergunta: Vejo em algumas linguagens que compilam para javascript, como TypeScript e CoffeeScript, o uso do @ em variáveis, como também, casos em que o ...
Qual tamanho máximo um arquivo JSON pode ter? – json arquivo
Pergunta: Vou dar um exemplo para conseguir explicar minha duvida: Preciso recuperar informação de imagens vindas de uma API, esse banco de imagens me retorna JSON's ...
O que é Teste de Regressão? – terminologia engenharia-de-software testes
Pergunta: Na matéria de Teste de Software o professor abordou um termo chamado Teste de Regressão, isto dentro da disciplina de teste de software. Sendo ...
O que é um construtor da linguagem? – php característica-linguagem
Pergunta: Em PHP, já li e ouvi várias vezes a respeito dos Construtores da Linguagem. Os casos que sempre ouvi falar deles foi em casos ...
Função intrínseca para converter numérico para string – cobol
Pergunta: Estou a tentar saber se existe alguma função intrínseca do COBOL para converter um data numérico para string sem precisar usar a cláusula REDEFINES: ( ...
Porque usar implements? – java android
Pergunta: Qual a diferença entre usar btn.setOnClickListener(new OnClickListener() { e public class MainActivity extends Activity implements OnClickListener{ Estive fazendo um curso de Android e meu professor falou que ...
O que é XHTML e quando deve ser usado? – html xml xhtml
Pergunta: O que eu sei é que o XHTML precisa ser XML válido. Isso implica, por exemplo, que todas as tags precisam ser fechadas. Por ...
Uma placa aceleradora de vídeo pode melhorar o desempenho não-gráfico? [fechada] – desempenho
Pergunta: Para desenvolver em Ruby on Rails, eu utilizo aqui uma máquina virtual do VirtualBox com Ubuntu Server 14.04 sem interface gráfica instalada. Recentemente descobri uma ...
Concat() VS Union() – c# .net
Pergunta: Qual a diferença entre Concat() e Union() ? Quando usar Concat() e quando usar Union() ? Somente pode ser usado em list ? ...

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *