0

您好我正在为我的 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 帖子,但找不到可行的解决方案,因此想知道是否有人有任何建议喜欢在应用程序安装期间执行某种操作以获取最新的数据库更改。由于应用程序安装将始终在互联网开启时发生。

欢迎任何建议或想法!

4

1 回答 1

0

您可以使用Xamarin.Essentials: Connectivity首先检查网络,然后决定是获取数据库更改还是显示警报以告诉用户需要连接到 Internet:

    var current = Connectivity.NetworkAccess;

    if (current == NetworkAccess.Internet)
    {
        //internet is available
        CheckVersionUpdateDevice();
    }
    else
    {
        //show alert to user
    }
于 2020-11-17T06:38:24.517 回答