Activar la sincronización sin conexión para la aplicación móvil de AndroidEnable offline sync for your Android mobile app

Nota

Visual Studio App Center está invirtiendo en servicios nuevos e integrados fundamentales para el desarrollo de aplicaciones móviles.Visual Studio App Center is investing in new and integrated services central to mobile app development. Los desarrolladores pueden usar los servicios de compilación, prueba y distribución para configurar canalizaciones de integración y entrega continuas.Developers can use Build, Test and Distribute services to set up Continuous Integration and Delivery pipeline. Una vez que se ha implementado la aplicación, los desarrolladores pueden supervisar el estado y el uso de su aplicación con los servicios de análisis y diagnóstico, e interactuar con los usuarios que usan el servicio de Push (inserción).Once the app is deployed, developers can monitor the status and usage of their app using the Analytics and Diagnostics services, and engage with users using the Push service. Además, los desarrolladores pueden aprovechar Auth para autenticar a los usuarios y el servicio de datos para almacenar y sincronizar los datos de la aplicación en la nube.Developers can also leverage Auth to authenticate their users and Data service to persist and sync app data in the cloud. Visite App Center hoy mismo.Check out App Center today.

Información generalOverview

En este tutorial se explica la característica de sincronización sin conexión de Azure Mobile Apps para Android.This tutorial covers the offline sync feature of Azure Mobile Apps for Android. La sincronización sin conexión permite a los usuarios finales interactuar con una aplicación móvil —ver, agregar o modificar datos— aun cuando no haya conexión de red.Offline sync allows end users to interact with a mobile app—viewing, adding, or modifying data—even when there is no network connection. Los cambios se almacenan en una base de datos local.Changes are stored in a local database. Una vez que el dispositivo se vuelve a conectar, estos cambios se sincronizan con el back-end remoto.Once the device is back online, these changes are synced with the remote backend.

Si esta es la primera vez que usa Azure Mobile Apps, primero debería completar el tutorial Creación de una aplicación de Android.If this is your first experience with Azure Mobile Apps, you should first complete the tutorial Create an Android App. Si no usa el proyecto de servidor de inicio rápido descargado, debe agregar paquetes de extensión de acceso de datos al proyecto.If you do not use the downloaded quick start server project, you must add the data access extension packages to your project. Para obtener más información acerca de los paquetes de extensión de servidor, consulte Trabajar con el SDK del servidor back-end de .NET para Aplicaciones móviles de Azure.For more information about server extension packages, see Work with the .NET backend server SDK for Azure Mobile Apps.

Para obtener más información acerca de la característica de sincronización sin conexión, consulte el tema Sincronización de datos sin conexión en Aplicaciones móviles de Azure.To learn more about the offline sync feature, see the topic Offline Data Sync in Azure Mobile Apps.

Actualización de la aplicación para que admita la sincronización sin conexiónUpdate the app to support offline sync

Con la sincronización sin conexión, se lee y se escribe desde una tabla de sincronización (usando la interfaz IMobileServiceSyncTable), que forma parte de una base de datos SQLite en el 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.

Para insertar y extraer los cambios entre el dispositivo y Azure Mobile Services, se usa un contexto de sincronización (MobileServiceClient.SyncContext), que se inicializa con la base de datos local usada para almacenar los datos localmente.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. En TodoActivity.java, convierta en comentario la definición existente de mToDoTable y quite la marca de comentario de la versión de la tabla de sincronización:In TodoActivity.java, comment out the existing definition of mToDoTable and uncomment the sync table version:

     private MobileServiceSyncTable<ToDoItem> mToDoTable;
    
  2. En el método onCreate, convierta en comentario la inicialización existente de mToDoTable y quite la marca de comentario de esta definición:In the onCreate method, comment out the existing initialization of mToDoTable and uncomment this definition:

     mToDoTable = mClient.getSyncTable("ToDoItem", ToDoItem.class);
    
  3. En refreshItemsFromTable, convierta en comentario la definición de results y quite la marca de comentario de esta definición:In refreshItemsFromTable comment out the definition of results and uncomment this definition:

     // Offline Sync
     final List<ToDoItem> results = refreshItemsFromMobileServiceTableSyncTable();
    
  4. Convierta en comentario la definición de refreshItemsFromMobileServiceTable.Comment out the definition of refreshItemsFromMobileServiceTable.

  5. Quite la marca de comentario de la definición de 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. Quite la marca de comentario de la definición de 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);
     }
    

Prueba de la aplicaciónTest the app

En esta sección, probará el comportamiento con la red inalámbrica activada y, después, desactivará la red inalámbrica para crear un escenario sin conexión.In this section, you test the behavior with WiFi on, and then turn off WiFi to create an offline scenario.

Al agregar elementos de datos, se guardan en el almacén local de SQLite, pero no se sincronizarán con el servicio móvil hasta que presione el botón Actualizar .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. Otras aplicaciones pueden tener requisitos diferentes con respecto a cuándo deben sincronizarse los datos, pero para los fines de demostración de este tutorial, haga que el usuario lo solicite expresamente.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.

Cuando presione ese botón, se iniciará una nueva tarea en segundo plano.When you press that button, a new background task starts. En primer lugar, inserta todos los cambios realizados en el almacén local mediante el contexto de sincronización y, a continuación, extrae todos los datos cambiados de Azure a la tabla local.It first pushes all changes made to the local store using synchronization context, then pulls all changed data from Azure to the local table.

Pruebas sin conexiónOffline testing

  1. Coloque el dispositivo o el simulador en Modo avión.Place the device or simulator in Airplane Mode. Esto crea un escenario sin conexión.This creates an offline scenario.

  2. Agregue algunos elementos ToDo o marque algunos elementos como completados.Add some ToDo items, or mark some items as complete. Salga del dispositivo o del simulador (o fuerce el cierre de la aplicación) y reinicie.Quit the device or simulator (or forcibly close the app) and restart. Compruebe que los cambios se conservan en el dispositivo porque se guardan en el almacén local de SQLite.Verify that your changes have been persisted on the device because they are held in the local SQLite store.

  3. Visualice los contenidos de la tabla TodoItem de Azure con una herramienta SQL, como SQL Server Management Studio o con un cliente REST como 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. Compruebe que los nuevos elementos no se han sincronizado con el servidor:Verify that the new items have not been synced to the server

    + <span data-ttu-id="65cb1-141">En un back-end de Node.js, vaya a [Azure Portal](https://portal.azure.com/) y, en el back-end de Mobile App, haga clic en **Tablas fáciles** > **TodoItem** para ver el contenido de la tabla `TodoItem`.</span><span class="sxs-lookup"><span data-stu-id="65cb1-141">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="65cb1-142">En el back-end de .NET, vea el contenido de tabla con una herramienta SQL, como *SQL Server Management Studio*, o con un cliente REST como *Fiddler* o *Postman*.</span><span class="sxs-lookup"><span data-stu-id="65cb1-142">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. Active la red inalámbrica en el dispositivo o el simulador.Turn on WiFi in the device or simulator. Después, presione el botón Actualizar .Next, press the Refresh button.

  5. Vea los datos de TodoItem de nuevo en el portal de Azure.View the TodoItem data again in the Azure portal. Ahora deberían aparecer los elementos de TodoItems nuevos y modificados.The new and changed TodoItems should now appear.

Recursos adicionalesAdditional Resources