Partager via


Activer la synchronisation hors connexion pour votre application mobile Android

Aperçu

Ce tutoriel traite de la fonctionnalité de synchronisation hors connexion d’Azure Mobile Apps pour Android. La synchronisation hors connexion permet aux utilisateurs finaux d’interagir avec une application mobile (affichage, ajout ou modification de données), même s’il n’existe aucune connexion réseau. Les modifications sont stockées dans une base de données locale. Une fois que l’appareil est de nouveau en ligne, ces modifications sont synchronisées avec le back-end distant.

S’il s’agit de votre première expérience avec Azure Mobile Apps, vous devez d’abord suivre le tutoriel Créer une application Android. Si vous n’utilisez pas le projet de serveur de démarrage rapide téléchargé, vous devez ajouter les packages d’extension d’accès aux données à votre projet. Pour plus d’informations sur les packages d’extension de serveur, consultez Utiliser le Kit de développement logiciel (SDK) du serveur principal .NET pour Azure Mobile Apps.

Pour en savoir plus sur la fonctionnalité de synchronisation hors connexion, consultez la rubrique Offline Data Sync dans Azure Mobile Apps.

Mettre à jour l’application pour prendre en charge la synchronisation hors connexion

Avec la synchronisation hors connexion, vous lisez et écrivez à partir d’une table de synchronisation (à l’aide de l’interface IMobileServiceSyncTable), qui fait partie d’une base de données SQLite sur votre appareil.

Pour envoyer et extraire des modifications entre l’appareil et Azure Mobile Services, vous utilisez un contexte de synchronisation (MobileServiceClient.SyncContext), que vous initialisez avec la base de données locale pour stocker les données localement.

  1. Dans TodoActivity.java, commentez la définition existante de mToDoTable et supprimez les marques de commentaire de la version de la table de synchronisation :

     private MobileServiceSyncTable<ToDoItem> mToDoTable;
    
  2. Dans la méthode onCreate, commentez l’initialisation existante de mToDoTable et décommentez cette définition :

     mToDoTable = mClient.getSyncTable("ToDoItem", ToDoItem.class);
    
  3. Dans refreshItemsFromTable, commentez la définition de results et décommentez cette définition :

     // Offline Sync
     final List<ToDoItem> results = refreshItemsFromMobileServiceTableSyncTable();
    
  4. Commentez la définition de refreshItemsFromMobileServiceTable.

  5. Retirez le commentaire de la définition 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. Décommenter la définition 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);
     }
    

Tester l’application

Dans cette section, vous testez le comportement avec wi-fi activé, puis désactivez wi-fi pour créer un scénario hors connexion.

Lorsque vous ajoutez des éléments de données, ils sont conservés dans le magasin SQLite local, mais pas synchronisés avec le service mobile tant que vous n’avez pas appuyé sur le bouton Actualiser . D’autres applications peuvent avoir des exigences différentes en ce qui concerne le moment où les données doivent être synchronisées, mais à des fins de démonstration, cet utilisateur l’a explicitement demandé.

Lorsque vous appuyez sur ce bouton, une nouvelle tâche en arrière-plan démarre. Il envoie tout d’abord toutes les modifications apportées au magasin local à l’aide du contexte de synchronisation, puis extrait toutes les données modifiées d’Azure vers la table locale.

Test hors connexion

  1. Placez l’appareil ou le simulateur en mode avion . Cela crée un scénario hors connexion.

  2. Ajoutez des ToDo éléments ou marquez certains éléments comme étant terminés. Quittez l’appareil ou le simulateur (ou fermez l’application de force) et redémarrez. Vérifiez que vos modifications ont été conservées sur l’appareil, car elles sont conservées dans le magasin SQLite local.

  3. Affichez le contenu de la table TodoItem Azure avec un outil SQL tel que SQL Server Management Studio, ou un client REST tel que Fiddler ou Postman. Vérifiez que les nouveaux éléments n’ont pas été synchronisés avec le serveur

    + 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. Activez le Wi-Fi dans l’appareil ou le simulateur. Ensuite, appuyez sur le bouton Actualiser.

  5. Affichez à nouveau les données TodoItem dans le portail Azure. Les nouveaux todoItems modifiés doivent maintenant apparaître.

Ressources additionnelles