Share via


Habilitar sincronização offline para seu aplicativo móvel Android

Visão geral

Este tutorial aborda o recurso de sincronização offline de Aplicativos móveis do Azure para Android. A sincronização offline permite que os usuários finais interajam com um aplicativo móvel – exibindo, adicionando ou modificando dados — mesmo quando não há conexão de rede. As alterações são armazenadas em um banco de dados local. Quando o dispositivo estiver online novamente, essas alterações serão sincronizadas com o back-end remoto.

Se essa for sua primeira experiência com os Aplicativos Móveis do Azure, você deve primeiro concluir o tutorial Criar um aplicativo do iOS. Se você não usar o projeto baixado do início rápido do servidor, deve adicionar os pacotes de extensão de acesso de dados autenticação ao seu projeto. Para obter mais informações sobre pacotes de extensão do servidor, confira Trabalhar com o servidor .NET back-end do SDK para Aplicativos Móveis do Azure.

Para saber mais sobre o recurso de sincronização offline, confira o tópico Sincronização de dados offline nos Aplicativos Móveis do Azure.

Atualizar o aplicativo para dar suporte à sincronização offline

Com sincronização offline você lê e grava de uma tabela de sincronização (usando a interface IMobileServiceSyncTable), que é parte de um banco de dados SQLite no dispositivo.

Para enviar e receber alterações entre o dispositivo e os serviços móveis do Azure, você deve usar um o contexto de sincronização (MobileServiceClient.SyncContext), que você inicializar com o banco de dados local para armazenar dados localmente.

  1. Em TodoActivity.java, comente a definição existente de mToDoTable e remova a versão da tabela de sincronização:

     private MobileServiceSyncTable<ToDoItem> mToDoTable;
    
  2. No método onCreate, comente a inicialização existente de mToDoTable e remova essa definição:

     mToDoTable = mClient.getSyncTable("ToDoItem", ToDoItem.class);
    
  3. Em refreshItemsFromTable, comente a definição de results e remova essa definição:

     // Offline Sync
     final List<ToDoItem> results = refreshItemsFromMobileServiceTableSyncTable();
    
  4. Comente a definição de refreshItemsFromMobileServiceTable:

  5. Remova a definição de refreshItemsFromMobileServiceTableSyncTable:

     private List<ToDoItem> refreshItemsFromMobileServiceTableSyncTable() throws ExecutionException, InterruptedException {
         //sync the data
         sync().get();
         Query query = QueryOperations.field("complete").
                 eq(val(false));
         return mToDoTable.read(query).get();
     }
    
  6. Remova a definição de sync:

     private AsyncTask<Void, Void, Void> sync() {
         AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>(){
             @Override
             protected Void doInBackground(Void... params) {
                 try {
                     MobileServiceSyncContext syncContext = mClient.getSyncContext();
                     syncContext.push().get();
                     mToDoTable.pull(null).get();
                 } catch (final Exception e) {
                     createAndShowDialogFromTask(e, "Error");
                 }
                 return null;
             }
         };
         return runAsyncTask(task);
     }
    

Testar o aplicativo

Nesta seção, você testará o comportamento com o WiFi ativado e depois o desativará para criar um cenário offline.

Quando você adiciona itens de dados, eles são mantidos no armazenamento local do SQL Lite , mas não sincronizados para o serviço móvel, até que você pressione o botão Atualizar . Outros aplicativos podem ter necessidades diferentes em relação a quando os dados precisam ser sincronizados, mas para fins de demonstração neste tutorial o usuário tem que solicitá-lo explicitamente.

Quando você pressiona o botão, inicia uma nova tarefa em segundo plano. Primeiro, ela envia por push todas as alterações feitas no repositório local usando o contexto de sincronização, e depois recebe todos os dados alterados do Azure para a tabela local.

Teste offline

  1. Coloque o dispositivo ou o simulador em Modo de Avião. Isso cria um cenário offline.

  2. Adicione alguns itens de tarefas pendentes ou marque alguns itens como concluídos. Feche o dispositivo ou simulador (ou feche forçadamente o aplicativo) e reinicie. Por ainda estarem vigentes no armazenamento do SQL Lite local, as alterações ficam mantidas no dispositivo.

  3. Exiba os conteúdos da tabela TodoItem do Azure com uma ferramenta SQL, como o SQL Server Management Studio, ou então com um cliente REST, como o Fiddler ou o Postman. Confirme que os novos itens não foram sincronizados com o servidor

    + For a Node.js backend, go to the [Azure portal](https://portal.azure.com/), and in your Mobile App backend click **Easy Tables** > **TodoItem** to view the contents of the `TodoItem` table.
    + For a .NET backend, view the table contents either with a SQL tool such as *SQL Server Management Studio*, or a REST client such as *Fiddler* or *Postman*.
    
  4. Ative o WiFi no simulador ou dispositivo. Em seguida, pressione o botão Atualizar .

  5. Exiba os dados de TodoItem novamente no portal do Azure. Os TodoItems novos e modificados agora devem aparecer.

Recursos adicionais