Ativar sincronização offline para a sua aplicação móvel Android

Descrição Geral

Este tutorial cobre a funcionalidade de sincronização offline de Aplicações Azure Mobile para Android. A sincronização offline permite que os utilizadores finais interajam com uma aplicação móvel — visualização, adição ou modificação de dados — mesmo quando não há ligação à rede. As alterações são armazenadas numa base de dados local. Uma vez que o dispositivo está novamente on-line, estas alterações são sincronizadas com o backend remoto.

Se esta é a sua primeira experiência com aplicações móveis Azure, deve primeiro completar o tutorial Criar uma Aplicação Android. Se não utilizar o projeto de servidor de arranque rápido descarregado, tem de adicionar os pacotes de extensão de acesso a dados ao seu projeto. Para obter mais informações sobre pacotes de extensão do servidor, consulte Work with the .NET backend server SDK for Azure Mobile Apps.

Para saber mais sobre a funcionalidade de sincronização offline, consulte o tópico Offline Sincronização de Dados em Azure Mobile Apps.

Atualize a app para suportar sincronização offline

Com sincronização offline, lê-se e escreve a partir de uma tabela de sincronização (utilizando a interface IMobileServiceSyncTable ), que faz parte de uma base de dados SQLite no seu dispositivo.

Para empurrar e puxar as alterações entre o dispositivo e o Azure Serviços Móveis, utiliza um contexto de sincronização (MobileServiceClient.SyncContext), que inicializa com a base de dados local para armazenar dados localmente.

  1. Em TodoActivity.java, comentar a definição existente e mToDoTable descomprimir a versão do quadro de sincronização:

     private MobileServiceSyncTable<ToDoItem> mToDoTable;
    
  2. onCreate No método, comentumente a inicialização mToDoTable e descodão existentes desta definição:

     mToDoTable = mClient.getSyncTable("ToDoItem", ToDoItem.class);
    
  3. Em refreshItemsFromTable comentários a definição e results descompromisso desta definição:

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

  5. Descomprimimento 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. Descomprimimento 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 a aplicação

Nesta secção, você testa o comportamento com Wi-Fi ligado e, em seguida, desligue o Wi-Fi para criar um cenário offline.

Quando adiciona itens de dados, eles são mantidos na loja LOCAL SQLite, mas não sincronizados com o serviço móvel até que você prima o botão Refresh . Outras aplicações podem ter requisitos diferentes em relação à data em que os dados precisam de ser sincronizados, mas para efeitos de demonstração este tutorial tem o utilizador explicitamente a solicitar.

Quando carregas nesse botão, inicia-se uma nova tarefa de fundo. Primeiro empurra todas as alterações feitas para a loja local usando o contexto de sincronização, em seguida, puxa todos os dados alterados de Azure para a mesa local.

Teste offline

  1. Coloque o dispositivo ou simulador no Modo Avião. Isto cria um cenário offline.

  2. Adicione alguns itens ToDo ou marque alguns itens como completos. Deixe o dispositivo ou simulador (ou feche à força a aplicação) e reinicie. Verifique se as suas alterações foram persistiu no dispositivo porque estão na loja LOCAL SQLite.

  3. Veja o conteúdo da tabela Azure TodoItem com uma ferramenta SQL, como SQL Server Management Studio, ou com um cliente REST, como o Fiddler ou o Carteiro. Verifique se os novos itens não foram sincronizados no 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. Ligue o Wi-Fi no dispositivo ou simulador. Em seguida, prima o botão Refresh .

  5. Consulte novamente os dados do TodoItem no portal do Azure. O novo e alterado TodoItems deve agora aparecer.

Recursos Adicionais