Abilitare la sincronizzazione offline per l'app per dispositivi mobili di AndroidEnable offline sync for your Android mobile app

PanoramicaOverview

Questa esercitazione descrive la funzionalità di sincronizzazione offline delle app per dispositivi mobili di Azure per Android.This tutorial covers the offline sync feature of Azure Mobile Apps for Android. La sincronizzazione offline consente agli utenti finali di interagire con un'app—visualizzando, aggiungendo e modificando i dati—anche se non è disponibile una connessione di rete.Offline sync allows end users to interact with a mobile app—viewing, adding, or modifying data—even when there is no network connection. Le modifiche vengono archiviate in un database locale.Changes are stored in a local database. Quando il dispositivo torna online, vengono sincronizzate con il back-end remoto.Once the device is back online, these changes are synced with the remote backend.

Se questa è la prima esperienza con le app per dispositivi mobili di Azure, è consigliabile completare prima l'esercitazione Creare un'app Android.If this is your first experience with Azure Mobile Apps, you should first complete the tutorial [Create an Android App]. Se non si usa il progetto server di avvio rapido scaricato, è necessario aggiungere al progetto il pacchetto di estensione per l'accesso ai dati.If you do not use the downloaded quick start server project, you must add the data access extension packages to your project. Per altre informazioni sui pacchetti di estensione server, vedere l'articolo relativo all' utilizzo dell'SDK del server back-end .NET per app per dispositivi mobili di Azure.For more information about server extension packages, see Work with the .NET backend server SDK for Azure Mobile Apps.

Per altre informazioni sulla funzionalità di sincronizzazione offline, vedere l'argomento Sincronizzazione di dati offline nelle app per dispositivi mobili di Azure.To learn more about the offline sync feature, see the topic [Offline Data Sync in Azure Mobile Apps].

Aggiornare l'app per supportare la sincronizzazione offlineUpdate the app to support offline sync

Con la sincronizzazione offline si legge e si scrive da una tabella di sincronizzazione (usando l'interfaccia IMobileServiceSyncTable), che fa parte di un database SQLite nel dispositivo.With offline sync, you read to and write from a sync table (using the IMobileServiceSyncTable interface), which is part of a SQLite database on your device.

Per eseguire il push e il pull delle modifiche tra il dispositivo e Servizi mobili di Azure, si usa un contesto di sincronizzazione (MobileServiceClient.SyncContext), inizializzato con il database locale per archiviare localmente i dati.To push and pull changes between the device and Azure Mobile Services, you use a synchronization context (MobileServiceClient.SyncContext), which you initialize with the local database to store data locally.

  1. In TodoActivity.java, impostare come commento la definizione esistente di mToDoTable e rimuovere il commento della versione della tabella di sincronizzazione:In TodoActivity.java, comment out the existing definition of mToDoTable and uncomment the sync table version:

     private MobileServiceSyncTable<ToDoItem> mToDoTable;
    
  2. Nel metodo onCreate, impostare come commento l'inizializzazione esistente di mToDoTable e rimuovere il commento di questa definizione:In the onCreate method, comment out the existing initialization of mToDoTable and uncomment this definition:

     mToDoTable = mClient.getSyncTable("ToDoItem", ToDoItem.class);
    
  3. In refreshItemsFromTable, impostare come commento la definizione di results e rimuovere il commento di questa definizione:In refreshItemsFromTable comment out the definition of results and uncomment this definition:

     // Offline Sync
     final List<ToDoItem> results = refreshItemsFromMobileServiceTableSyncTable();
    
  4. Impostare come commento la definizione di refreshItemsFromMobileServiceTable.Comment out the definition of refreshItemsFromMobileServiceTable.
  5. Rimuovere il commento dalla definizione di refreshItemsFromMobileServiceTableSyncTable:Uncomment the definition of 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. Rimuovere il commento dalla definizione di sync:Uncomment the definition of 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);
     }
    

Testare l'appTest the app

In questa sezione viene testato il comportamento dell'app con il WiFi attivato e quindi il WiFi viene disattivato per creare uno scenario offline.In this section, you test the behavior with WiFi on, and then turn off WiFi to create an offline scenario.

Quando si aggiungono elementi di dati, gli elementi vengono archiviati nell'archivio di SQL Lite, ma vengono sincronizzati con il servizio mobile solo dopo la selezione del pulsante di aggiornamento .When you add data items, they are held in the local SQLite store, but not synced to the mobile service until you press the Refresh button. Altre app potrebbero avere requisiti diversi relativi a quando è necessario sincronizzare i dati, ma per, finalità dimostrative, in questa esercitazione la sincronizzazione viene richiesta esplicitamente dall'utente.Other apps may have different requirements regarding when data needs to be synchronized, but for demo purposes this tutorial has the user explicitly request it.

Quando si preme il pulsante, viene avviata una nuova attività in background.When you press that button, a new background task starts. Viene effettuato prima di tutto il push di tutte le modifiche apportate all'archivio locale usando il contesto di sincronizzazione, quindi viene effettuato il pull di tutti i dati modificati da Azure alla tabella locale.It first pushes all changes made to the local store using synchronization context, then pulls all changed data from Azure to the local table.

Test offlineOffline testing

  1. Attivare la Modalità aereoper il dispositivo o il simulatore.Place the device or simulator in Airplane Mode. in modo da creare uno scenario offline.This creates an offline scenario.
  2. Aggiungere alcuni elementi ToDo o contrassegnare alcuni elementi come completati.Add some ToDo items, or mark some items as complete. Uscire dal dispositivo o dal simulatore (o forzare la chiusura dell'app) e riavviare.Quit the device or simulator (or forcibly close the app) and restart. Verificare che le modifiche siano state rese persistenti nel dispositivo, poiché sono incluse nell'archivio SQLite locale.Verify that your changes have been persisted on the device because they are held in the local SQLite store.
  3. Visualizzare il contenuto della tabella TodoItem di Azure mediante uno strumento SQL, come ad esempio SQL Server Management Studio, o mediante un client REST, ad esempio Fiddler o Postman.View the contents of the Azure TodoItem table either with a SQL tool such as SQL Server Management Studio, or a REST client such as Fiddler or Postman. Verificare che i nuovi elementi non siano stati sincronizzati con il serverVerify that the new items have not been synced to the server

    + <span data-ttu-id="128ec-136">Per un back-end Node.js, passare al [portale di Azure](https://portal.azure.com/) e nel back-end dell'app per dispositivi mobili fare clic su **Tabelle semplici** > **TodoItem** per visualizzare il contenuto della tabella `TodoItem`.</span><span class="sxs-lookup"><span data-stu-id="128ec-136">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.</span></span>
    + <span data-ttu-id="128ec-137">Per il back-end .NET, visualizzare il contenuto della tabella mediante uno strumento SQL, come ad esempio *SQL Server Management Studio*, o mediante un client REST, ad esempio *Fiddler* o *Postman*.</span><span class="sxs-lookup"><span data-stu-id="128ec-137">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*.</span></span>
    
  4. Attivare il WiFi nel dispositivo o nel simulatore.Turn on WiFi in the device or simulator. Premere quindi il pulsante di aggiornamento .Next, press the Refresh button.
  5. Visualizzare di nuovo i dati TodoItem nel portale di Azure.View the TodoItem data again in the Azure portal. Dovrebbero essere visualizzati gli elementi TodoItems nuovi e modificati.The new and changed TodoItems should now appear.

Risorse aggiuntiveAdditional Resources