Выполнить запрос sqlite во время установки мобильного приложения в xamarin.forms

Привет, я работаю над вариантом использования для своего приложения 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);
        }
    }

Все работает нормально, но недавно я столкнулся с проблемой, когда пользователь обновил приложение, но запустил приложение в автономном режиме. Поскольку приложение было запущено в автономном режиме, мой api на № 1 вернулся с исключением о подключении к Интернету. Из-за этого обновленная информация о базе данных не была получена, и мой обновленный код приложения, который нуждался в этой информации, впоследствии не удалось.

Я проверил другие сообщения SO здесь, но не смог найти жизнеспособное решение, так что интересно если у кого-то есть предложения, как выполнить какое-либо действие во время установки приложения, чтобы получить эти последние изменения базы данных. Поскольку установка приложения всегда будет происходить при подключении интернета.

Любые предложения или мысли приветствуются!


person Naphstor    schedule 16.11.2020    source источник
comment
если он не может обновиться при запуске по какой-либо причине, заблокируйте их от использования приложения и отображайте ошибку, пока они не смогут подключиться / обновить. ИЛИ встроите информацию об изменении базы данных в новую версию вместо того, чтобы получать ее с сервера.   -  person Jason    schedule 17.11.2020
comment
@ Джейсон, спасибо за ваше предложение. Это была моя первая мысль, но мне было интересно, есть ли другие способы решить эту проблему.   -  person Naphstor    schedule 17.11.2020


Ответы (1)


Вы можете использовать Xamarin.Essentials: Connectivity для проверки сначала сеть, а затем решить, следует ли получать изменения в базе данных или показывать предупреждение, чтобы сообщить пользователю о необходимости подключения к Интернету:

    var current = Connectivity.NetworkAccess;

    if (current == NetworkAccess.Internet)
    {
        //internet is available
        CheckVersionUpdateDevice();
    }
    else
    {
        //show alert to user
    }
person Jack Hua    schedule 17.11.2020