Dodawanie synchronizacji danych offline do aplikacji platformy Xamarin.Android
W tym samouczku omówiono funkcję synchronizacji offline usługi Azure Mobile Apps dla aplikacji Szybki start platformy Xamarin.Android. Synchronizacja w trybie offline umożliwia użytkownikom końcowym interakcję z aplikacją mobilną — wyświetlanie, dodawanie lub modyfikowanie danych — nawet wtedy, gdy nie ma połączenia sieciowego. Zmiany są przechowywane w lokalnej bazie danych. Po powrocie urządzenia do trybu online te zmiany są synchronizowane ze zdalnym zapleczem.
Przed rozpoczęciem tego samouczka należy ukończyć samouczek Szybki start platformy Xamarin.Android, który obejmuje tworzenie odpowiedniej usługi zaplecza. Zakładamy również, że dodano uwierzytelnianie do aplikacji. Jest to jednak opcjonalne.
Aktualizowanie aplikacji w celu obsługi synchronizacji w trybie offline
W przypadku operacji online odczytujesz i zapisujesz dane z obiektu IRemoteTable<T>
. Podczas korzystania z synchronizacji w trybie offline odczytujesz i zapisujesz dane z elementu IOfflineTable<T>
. Element IOfflineTable
jest wspierany przez bazę danych SQLite na urządzeniu i synchronizowany z bazą danych zaplecza.
W programie Visual Studio:
Kliknij rozwiązanie prawym przyciskiem myszy
TodoApp
, a następnie wybierz polecenie Zarządzaj pakietami NuGet dla rozwiązania....Na nowej karcie wybierz pozycję Przeglądaj, a następnie wprowadź ciąg Microsoft.Datasync.Client w polu wyszukiwania.
Microsoft.Datasync.Client.SQLiteStore
Wybierz pakiet.W okienku po prawej stronie wybierz wszystkie projekty klienckie (z wyjątkiem
TodoAppService.NET6
projektu).Wybierz Zainstaluj.
Zaakceptuj umowę licencyjną po wyświetleniu monitu.
Aktualizowanie klienta usługi zdalnej
Otwórz projekt i znajdź klasę TodoApp.Data
RemoteTodoService.cs
(w Services
katalogu). Zaktualizuj klasę w następujący sposób:
Dodaj następującą
using
instrukcję na początku pliku:using Microsoft.Datasync.Client.SQLiteStore;
Zmień definicję elementu
_table
na :IOfflineTable<TodoItem>
/// <summary> /// Reference to the table used for datasync operations. /// </summary> private IOfflineTable<TodoItem> _table = null;
Dodaj nową właściwość do przechowywania lokalizacji bazy danych w trybie offline:
/// <summary> /// The path to the offline database /// </summary> public string OfflineDb { get; set; }
Zaktualizuj metodę
InitializeAsync
, aby zdefiniować bazę danych w trybie offline:// Create the offline store definition var connectionString = new UriBuilder { Scheme = "file", Path = OfflineDb, Query = "?mode=rwc" }.Uri.ToString(); var store = new OfflineSQLiteStore(connectionString); store.DefineTable<TodoItem>(); var options = new DatasyncClientOptions { OfflineStore = store, HttpPipeline = new HttpMessageHandler[] { new LoggingHandler() } }; // Create the datasync client. _client = TokenRequestor == null ? new DatasyncClient(Constants.ServiceUri, options) : new DatasyncClient(Constants.ServiceUri, new GenericAuthenticationProvider(TokenRequestor), options); // Initialize the database await _client.InitializeOfflineStoreAsync(); // Get a reference to the offline table. _table = _client.GetOfflineTable<TodoItem>(); // Set _initialized to true to prevent duplication of locking. _initialized = true;
Zaktualizuj polecenie , aby wykonać synchronizację
RefreshItemsAsync()
w trybie offline:/// <summary> /// Refreshes the TodoItems list manually. /// </summary> /// <returns>A task that completes when the refresh is done.</returns> public async Task RefreshItemsAsync() { await InitializeAsync(); // First, push all the items in the table. await _table.PushItemsAsync(); // Then, pull all the items in the table. await _table.PullItemsAsync(); return; }
Ustawianie lokalizacji bazy danych w trybie offline
W projekcie zmodyfikuj TodoApp.Android
App.xaml.cs
plik. Zmień definicję elementu w RemoteTodoService
następujący sposób:
TodoService = new RemoteTodoService(async () => await GetAuthenticationToken())
{
OfflineDb = Xamarin.Essentials.FileSystem.AppDataDirectory + "/offline.db"
};
Jeśli nie ukończono samouczka uwierzytelniania, definicja powinna wyglądać następująco:
TodoService = new RemoteTodoService()
{
OfflineDb = Xamarin.Essentials.FileSystem.AppDataDirectory + "/offline.db"
};
Testowanie aplikacji
Aplikacja nie synchronizuje się z zapleczem do momentu naciśnięcia ikony odświeżania. Aby przetestować:
Otwórz portal Azure Portal.
Otwórz grupę zasobów zawierającą zasoby na potrzeby przewodnika Szybki start.
quickstart
Wybierz bazę danych.Wybierz edytor zapytań (wersja zapoznawcza).
Zaloguj się przy użyciu uwierzytelniania programu SQL Server przy użyciu tych samych poświadczeń skonfigurowanych dla bazy danych.
- W razie potrzeby zostanie wyświetlony monit o zezwolenie na dostęp do adresu IP. Wybierz link, aby zaktualizować listę dozwolonych, a następnie naciśnij przycisk OK , aby ponowić próbę zalogowania.
W edytorze zapytań wprowadź .
SELECT * FROM [dbo].[TodoItems]
Następnie wybierz opcję Uruchom.
Zostanie wyświetlona lista bieżących zadań do wykonania.
Teraz wprowadź pewne zmiany w aplikacji. NIE NACISKAJ JESZCZE PRZYCISKU ODŚWIEŻ .
Powtórz instrukcję SQL w witrynie Azure Portal i sprawdź, czy w bazie danych nie wprowadzono żadnych zmian.
Wybierz ikonę Odśwież w aplikacji, aby wypchnąć dane w kolejce do usługi zaplecza. W oknie Debugowanie danych wyjściowych zobaczysz transakcje HTTP.
Powtórz instrukcję SQL w witrynie Azure Portal i sprawdź, czy zmiany zostały wypchnięte do usługi zdalnej.
Czyszczenie zasobów
Jeśli nie wykonujesz innego samouczka Szybkiego startu, możesz teraz usunąć zasoby skojarzone z usługą zaplecza.
- Otwórz portal Azure Portal.
- Wybierz grupę zasobów zawierającą zasoby szybkiego startu.
- Wybierz pozycję Usuń grupę zasobów.
- Postępuj zgodnie z instrukcjami, aby potwierdzić usunięcie.
Możesz również użyć interfejsu wiersza polecenia platformy Azure:
az group delete -g quickstart
Jeśli do wdrażania zasobów użyto interfejsu wiersza polecenia dla deweloperów platformy Azure, możesz zamiast tego użyć azd down
polecenia .
Usunięcie potrwa kilka minut.
Następne kroki
- Zapoznaj się z dokumentacją INSTRUKCJI:
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla