こんにちは、Xamarin.forms アプリのユースケースに取り組んでいます。ユースケースは、アプリのインストール中にいくつかの sqlite クエリを実行して、新しいアプリ バージョンでデータベースの変更情報を取得することです。
現在、新しいバージョンにアップグレードした後にアプリを起動すると、API を呼び出して新しいバージョンのデータベースの変更を取得します。たとえば、既存のテーブルが更新された場合、アプリの起動中に情報を取得し、それに応じてそれらのデータベース テーブルをリセットします。以下は、この情報を実行して取得する私のコードです。
public async Task CheckVersionUpdateDevice()
{
try
{
AppVersion _appVersion = new AppVersion();
string strSQL = "SELECT * FROM AppVersion";
var existingAppVersion = await sqlLiteDatabase.GetItemsAsync<AppVersion>(strSQL);
Version _currentVersion = Version.Parse(existingAppVersion[0].versionNumber);
Version _newVersion = AppInfo.Version;
int comparisonResult = _newVersion.CompareTo(_currentVersion);
if (comparisonResult > 0)
{
var result = _deviceService.GetVersionChangeData(existingAppVersion[0].versionNumber); // #1 Get database changes in new version
if (result != null && result[0].ChangeList != null && result[0].ChangeList.Count > 0)
{
UpdateTablesAndFiles(result[0].ChangeList); // #2 Reset all the tables.
}
}
_appVersion.versionNumber = _newVersion.ToString();
await sqlLiteDatabase.InsertOrReplaceAsync<AppVersion>(_appVersion, false);
}
catch (Exception ex)
{
await App.HandleException(ex);
}
}
すべて正常に動作しますが、最近、ユーザーがアプリをアップグレードしたがオフライン モードでアプリを起動したという問題が発生しました。アプリがオフライン モードで起動されたため、#1 の API がインターネット接続に関する例外を返しました。そのため、更新されたデータベース情報が受信されず、その情報を必要とするアップグレードされたアプリ コードがその後失敗しました。
ここで他のSOの投稿をチェックしましたが、実行可能な解決策が見つからなかったので、アプリのインストール中に何らかのアクションを実行して最新のデータベースの変更を取得することを提案する人がいるかどうか疑問に思います. アプリのインストールは、インターネットがオンになっているときに常に行われるためです。
提案や考えは大歓迎です!