Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Przegląd
W tym samouczku przedstawiono funkcję synchronizacji offline usługi Azure Mobile Apps for Xamarin.Android. Synchronizacja w trybie offline umożliwia użytkownikom końcowym interakcję z aplikacją mobilną — wyświetlanie, dodawanie lub modyfikowanie danych — nawet jeśli nie ma połączenia sieciowego. Zmiany są przechowywane w lokalnej bazie danych. Po powrocie urządzenia do trybu online te zmiany są synchronizowane z usługą zdalną.
W tym samouczku zaktualizujesz projekt klienta z samouczka Tworzenie aplikacji platformy Xamarin dla systemu Android , aby obsługiwać funkcje trybu offline usługi Azure Mobile Apps. Jeśli nie używasz pobranego projektu serwera Szybki start, musisz dodać pakiety rozszerzeń dostępu do danych do projektu. Aby uzyskać więcej informacji na temat pakietów rozszerzeń serwera, zobacz Work with the .NET backend server SDK for Azure Mobile Apps.
Aby dowiedzieć się więcej na temat funkcji synchronizacji offline, zobacz temat Offline Data Sync w usłudze Azure Mobile Apps.
Aktualizowanie aplikacji klienckiej w celu obsługi funkcji w trybie offline
Funkcje trybu offline aplikacji mobilnej Platformy Azure umożliwiają interakcję z lokalną bazą danych w scenariuszu offline. Aby użyć tych funkcji w aplikacji, należy zainicjować SyncContext w sklepie lokalnym. Następnie odwołaj się do tabeli za pomocą interfejsu IMobileServiceSyncTable. SqLite jest używany jako magazyn lokalny na urządzeniu.
- W programie Visual Studio otwórz menedżera pakietów NuGet w projekcie ukończonym w samouczku Tworzenie aplikacji platformy Xamarin dla systemu Android . Wyszukaj i zainstaluj pakiet NuGet Microsoft.Azure.Mobile.Client.SQLiteStore.
- Otwórz plik ToDoActivity.cs i usuń komentarz z
#define OFFLINE_SYNC_ENABLED
definicji. - W programie Visual Studio naciśnij F5, aby ponownie skompilować i uruchomić aplikację kliencka. Aplikacja działa tak samo jak przed włączeniem synchronizacji w trybie offline. Jednak lokalna baza danych jest teraz wypełniana danymi, które mogą być używane w scenariuszu offline.
Zaktualizuj aplikację, aby rozłączyć się z backendem
W tej sekcji przerywasz połączenie z zapleczem aplikacji mobilnej, aby symulować sytuację w trybie offline. Po dodaniu elementów danych program obsługi wyjątków informuje, że aplikacja jest w trybie offline. W tym stanie nowe elementy są dodawane do lokalnego magazynu i synchronizowane z zapleczem aplikacji mobilnej, gdy push jest wykonywany w stanie połączonym.
Edytuj ToDoActivity.cs w udostępnionym projekcie. Zmień applicationURL, aby wskazać nieprawidłowy adres URL:
const string applicationURL = @"https://your-service.azurewebsites.fail";
Możesz również zademonstrować zachowanie w trybie offline, wyłączając sieć Wi-Fi i sieci komórkowe na urządzeniu lub korzystając z trybu samolotowego.
Naciśnij F5, aby skompilować i uruchomić aplikację. Zwróć uwagę, że synchronizacja nie powiodła się podczas odświeżania po uruchomieniu aplikacji.
Wprowadź nowe elementy i zwróć uwagę, że operacja wypychania kończy się niepowodzeniem z komunikatem [CancelledByNetworkError] za każdym razem, gdy klikniesz Zapisz. Jednak nowe pozycje na liście zadań istnieją w lokalnym magazynie danych do momentu, gdy mogą zostać przesłane do backendu aplikacji mobilnej. W aplikacji produkcyjnej, jeśli pomijasz te wyjątki, aplikacja kliencka zachowuje się tak, jakby nadal była połączona z zapleczem aplikacji mobilnej.
Zamknij aplikację i uruchom ją ponownie, aby sprawdzić, czy nowo utworzone elementy są zapisane w pamięci lokalnej.
(Opcjonalnie) W programie Visual Studio otwórz program Server Explorer. Przejdź do swojej bazy danych w Azure—>SQL Databases. Kliknij prawym przyciskiem myszy bazę danych i wybierz pozycję Otwórz w Eksploratorze obiektów programu SQL Server. Teraz możesz przejść do tabeli bazy danych SQL i jej zawartości. Sprawdź, czy dane w bazie danych zaplecza nie uległy zmianie.
(Opcjonalnie) Użyj narzędzia REST, takiego jak Fiddler lub Postman, aby wykonać zapytanie względem zaplecza mobilnego przy użyciu zapytania GET w formularzu
https://<your-mobile-app-backend-name>.azurewebsites.net/tables/TodoItem
.
Aktualizowanie aplikacji w celu ponownego połączenia zaplecza aplikacji mobilnej
W tej sekcji ponownie połącz aplikację z zapleczem aplikacji mobilnej. Po pierwszym uruchomieniu aplikacji program obsługi zdarzeń OnCreate
wywołuje OnRefreshItemsSelected
. Ta metoda wywołuje metodę SyncAsync
w celu zsynchronizowania magazynu lokalnego z bazą danych zaplecza.
Otwórz ToDoActivity.cs w udostępnionym projekcie i przywróć zmianę właściwości applicationURL .
Naciśnij F5, aby ponownie skompilować i uruchomić aplikację. Aplikacja synchronizuje zmiany lokalne z zapleczem usługi Azure Mobile App przy użyciu operacji wypychania i ściągania po wykonaniu metody
OnRefreshItemsSelected
.(Opcjonalnie) Wyświetl zaktualizowane dane przy użyciu Eksploratora obiektów programu SQL Server lub narzędzia REST, takiego jak Fiddler. Zwróć uwagę, że dane zostały zsynchronizowane między bazą danych zaplecza aplikacji mobilnej Azure a magazynem lokalnym.
W aplikacji kliknij pole wyboru obok kilku elementów, aby je ukończyć w sklepie lokalnym.
CheckItem
wywołujeSyncAsync
, aby zsynchronizować każdy ukończony element z zapleczem aplikacji mobilnej.SyncAsync
powoduje zarówno wypychanie, jak i ściąganie. Za każdym razem, gdy wykonasz ściągnięcie względem tabeli, do której klient wprowadził zmiany, wypychanie jest zawsze wykonywane automatycznie. Dzięki temu wszystkie tabele w lokalnym magazynie oraz ich relacje pozostają zgodne i spójne. To zachowanie może spowodować nieoczekiwany efekt. Aby uzyskać więcej informacji na temat tego zachowania, zobacz Synchronizacja danych w trybie offline w usłudze Azure Mobile Apps.
Przeglądanie kodu synchronizacji klienta
Projekt klienta platformy Xamarin pobrany po ukończeniu samouczka Tworzenie aplikacji platformy Xamarin dla systemu Android zawiera już kod obsługujący synchronizację w trybie offline przy użyciu lokalnej bazy danych SQLite. Poniżej przedstawiono krótkie omówienie elementów, które zostały już uwzględnione w kodzie samouczka. Aby zapoznać się z koncepcyjnym omówieniem tej funkcji, zobacz Offline Data Sync w usłudze Azure Mobile Apps.
Przed rozpoczęciem wykonywania jakichkolwiek operacji na tabeli należy zainicjować lokalny magazyn. Baza danych lokalnego sklepu jest inicjowana, gdy
ToDoActivity.OnCreate()
uruchamiaToDoActivity.InitLocalStoreAsync()
. Ta metoda tworzy lokalną bazę danych SQLite przy użyciu klasy udostępnionejMobileServiceSQLiteStore
przez zestaw SDK klienta usługi Azure Mobile Apps.Metoda
DefineTable
tworzy tabelę w magazynie lokalnym, która jest zgodna z polami określonego typu, w tym przypadkuToDoItem
. Typ nie musi zawierać wszystkich kolumn, które znajdują się w zdalnej bazie danych. Można przechowywać tylko podzbiór kolumn.// ToDoActivity.cs private async Task InitLocalStoreAsync() { // new code to initialize the SQLite store string path = Path.Combine(System.Environment .GetFolderPath(System.Environment.SpecialFolder.Personal), localDbFilename); if (!File.Exists(path)) { File.Create(path).Dispose(); } var store = new MobileServiceSQLiteStore(path); store.DefineTable<ToDoItem>(); // Uses the default conflict handler, which fails on conflict // To use a different conflict handler, pass a parameter to InitializeAsync. // For more details, see https://go.microsoft.com/fwlink/?LinkId=521416. await client.SyncContext.InitializeAsync(store); }
Członek
toDoTable
zToDoActivity
jest typuIMobileServiceSyncTable
zamiastIMobileServiceTable
. Tabela IMobileServiceSyncTable kieruje wszystkie operacje tabel tworzenia, odczytu, aktualizacji i usuwania (CRUD) do bazy danych magazynu lokalnego.Decydujesz, kiedy zmiany są wypychane do zaplecza aplikacji mobilnej Platformy Azure, wywołując polecenie
IMobileServiceSyncContext.PushAsync()
. Kontekst synchronizacyjny pomaga zachować relacje między tabelami poprzez śledzenie i przesyłanie zmian we wszystkich tabelach, które aplikacja kliencka zmodyfikowała po wywołaniuPushAsync
.Podany kod wywołuje
ToDoActivity.SyncAsync()
w celu synchronizacji za każdym razem, gdy lista elementów zadań zostanie odświeżona lub gdy zostanie dodany lub ukończony nowy element zadania. Kod jest synchronizowany po każdej zmianie lokalnej.W podanym kodzie są odpytywane wszystkie rekordy w zdalnej tabeli
TodoItem
, ale istnieje również możliwość filtrowania rekordów poprzez przekazanie identyfikatora zapytania i zapytania doPushAsync
. Aby uzyskać więcej informacji, zobacz sekcję Synchronizacji przyrostowej w sekcji Synchronizacja danych w trybie offline w usłudze Azure Mobile Apps.// ToDoActivity.cs private async Task SyncAsync() { try { await client.SyncContext.PushAsync(); await toDoTable.PullAsync("allTodoItems", toDoTable.CreateQuery()); // query ID is used for incremental sync } catch (Java.Net.MalformedURLException) { CreateAndShowDialog (new Exception ("There was an error creating the Mobile Service. Verify the URL"), "Error"); } catch (Exception e) { CreateAndShowDialog (e, "Error"); } }