Dela via


Aktivera offlinesynkronisering för din Android-mobilapp

Översikt

Den här självstudien beskriver funktionen för offlinesynkronisering i Azure Mobile Apps för Android. Med offlinesynkronisering kan slutanvändarna interagera med en mobilapp – visa, lägga till eller ändra data – även om det inte finns någon nätverksanslutning. Ändringar lagras i en lokal databas. När enheten är online igen synkroniseras dessa ändringar med fjärrserverdelen.

Om det här är din första upplevelse med Azure Mobile Apps bör du först slutföra självstudien Skapa en Android-app. Om du inte använder det nedladdade snabbstartsserverprojektet måste du lägga till paketen för dataåtkomsttillägg i projektet. Mer information om servertilläggspaket finns i Work with the .NET backend server SDK for Azure Mobile Apps.

Mer information om funktionen för offlinesynkronisering finns i avsnittet Offline Data Sync i Azure Mobile Apps.

Uppdatera appen för att stödja offlinesynkronisering

Med offlinesynkronisering läser du till och skriver från en synkroniseringstabell (med gränssnittet IMobileServiceSyncTable ), som är en del av en SQLite-databas på enheten.

Om du vill skicka och hämta ändringar mellan enheten och Azure Mobile Services använder du en synkroniseringskontext (MobileServiceClient.SyncContext), som du initierar med den lokala databasen för att lagra data lokalt.

  1. I TodoActivity.javakommenterar du ut den befintliga definitionen av och avkommenterade mToDoTable synkroniseringstabellversionen:

     private MobileServiceSyncTable<ToDoItem> mToDoTable;
    
  2. onCreate I metoden kommenterar du ut den befintliga initieringen av och avkommentar mToDoTable den här definitionen:

     mToDoTable = mClient.getSyncTable("ToDoItem", ToDoItem.class);
    
  3. Kommentera refreshItemsFromTable ut definitionen av och avkommenteringen results för den här definitionen:

     // Offline Sync
     final List<ToDoItem> results = refreshItemsFromMobileServiceTableSyncTable();
    
  4. Kommentera ut definitionen av refreshItemsFromMobileServiceTable.

  5. Avkommentering av definitionen av 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. Avkommentering av definitionen av 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);
     }
    

Testa appen

I det här avsnittet testar du beteendet med WiFi på och inaktiverar sedan WiFi för att skapa ett offlinescenario.

När du lägger till dataobjekt lagras de i det lokala SQLite-arkivet, men synkroniseras inte med mobiltjänsten förrän du trycker på knappen Uppdatera . Andra appar kan ha olika krav på när data behöver synkroniseras, men i demosyfte begär användaren uttryckligen den i den här självstudien.

När du trycker på knappen startas en ny bakgrundsaktivitet. Den skickar först alla ändringar som gjorts i det lokala arkivet med hjälp av synkroniseringskontexten och hämtar sedan alla ändrade data från Azure till den lokala tabellen.

Offlinetest

  1. Placera enheten eller simulatorn i flygplansläge. Detta skapar ett offlinescenario.

  2. Lägg till några ToDo-objekt eller markera vissa objekt som slutförda. Avsluta appen på enheten eller simulatorn (eller tvångsavsluta appen) och starta om. Kontrollera att ändringarna har sparats på enheten eftersom de lagras i det lokala SQLite-arkivet.

  3. Visa innehållet i Azure TodoItem-tabellen antingen med ett SQL-verktyg som SQL Server Management Studio eller en REST-klient som Fiddler eller Postman. Kontrollera att de nya objekten inte har synkroniserats till servern

    + 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. Aktivera WiFi i enheten eller simulatorn. Tryck sedan på knappen Uppdatera .

  5. Visa TodoItem-data igen i Azure-portalen. De nya och ändrade TodoItems bör nu visas.

Ytterligare resurser