При вызове метода OnStart происходит сбой Akavache или Sqlite.

Когда я использую приведенный ниже код в своем проекте xamarin.forms, чтобы проверить, существует ли объект User в кэше akavache, я получаю исключение ниже. тот же код или любой запрос akavache работает где-то еще, но вылетает только в методе onStart. Я считаю, что я уже инициализирую akavache в конструкторе. Я попробовал точно такой же код, используя мобильный центр для запроса локальных (локальных sqlite) пользовательских данных, и я получаю то же исключение. Я думаю, что это должно быть как-то связано с sqlite, так как и akavache, и мобильный центр используют схожие библиотеки sqlite. Кто-нибудь знает, почему он не работает в методе OnStart?

 public App()
        {
            Microsoft.Azure.Mobile.MobileCenter.Start("android=key" +
                   "uwp=key",
                   typeof(Microsoft.Azure.Mobile.Analytics.Analytics), typeof(Microsoft.Azure.Mobile.Crashes.Crashes));

            Akavache.BlobCache.ApplicationName = "myApp";
            Akavache.BlobCache.EnsureInitialized();

            ServiceLocator.Add<ICloudService, AzureCloudService>();

            InitializeComponent();

            }

  protected async override void OnStart()
        { 

            try
            {
               var User= await BlobCache.UserAccount.GetObject<User>("User");

                if (User != null)
                    Helpers.Settings.IsLoggedIn = true;
                else
                    Helpers.Settings.IsLoggedIn = false;
            }
            catch (Exception)
            {
                Helpers.Settings.IsLoggedIn = false;
            }
           ShowMainPageOrLoginPage();
        }

11-13 02: 08: 14.761 E / MobileCenterCrashes (6308): необработанное исключение: 11-13 02:08:14.761 E/MobileCenterCrashes( 6308): System.NullReferenceException: ссылка на объект не установлена ​​для экземпляра объекта. 11-13 02:08:14.761 E/MobileCenterCrashes( 6308): в Xamarin.Forms.Platform.Android.AppCompat.Platform.LayoutRootPage (страница Xamarin.Forms.Page, ширина System.Int32, высота System.Int32) [0x0000c] в D:\agent_work\1\s\Xamarin.Forms.Platform.Android\AppCompat\Platform.cs:291 11-13 02:08:14.761 E/MobileCenterCrashes( 6308): в Xamarin.Forms.Platform.Android.AppCompat.Platform.Xamarin.Forms.Platform.Android.IPlatformLayout.OnLayout (System.Boolean изменено, System.Int32 l, System.Int32 t, System.Int32 r, System.Int32 b) [0x00003] в D:\agent_work\1\s\Xamarin.Forms.Platform.Android\AppCompat\Platform.cs:199 11-13 02:08:14.761 E/MobileCenterCrashes( 6308): в Xamarin.Forms.Platform.Android.PlatformRenderer.OnLayout (System.Boolean изменено, System.Int32 l, System.Int32 t, System.Int32 r, System.Int32 b) [0x0000e] в D:\agent_work\1\s\Xamarin.Forms.Platform.Android\PlatformRenderer.cs:73 11-13 02:08:14.761 E/MobileCenterCrashes( 6308): на Android.Views.ViewGroup.n_OnLayout_ZIIII (System.IntPtr jnienv, System.IntPtr native__this, System.Boolean изменено, System.Int32 l, System.Int32 t, System.Int32 r, System.Int32 b) [0x00008] в: 0

РЕДАКТИРОВАТЬ: Эта проблема определенно вызвана akavache. Сообщение действительно странное. похоже, что akavache имеет какое-то отношение к LayoutRootPage.

Посмотрите мой код выше, я получаю объект User из кэша akavache, и объект user определяет, нужно ли мне показывать страницу входа или главную страницу. Если я перееду ShowMainPageOrLoginPage();Функция выше вызова акаваче, работает просто отлично. Таким образом, кажется, что вы не можете сделать любой запрос с помощью akavache до того, как rootlayoutpage - главная страница установлена ​​или загружена.

1 ответ

У меня одна и та же проблема была однажды, по какой-то причине, если вы инициализируете статическим методом, он не работает постоянно.

Не работает

IBlobCache _cache = BlobCache.LocalMachine;

Работает

IBlobCache _cache = new SQLitePersistentBlobCache(systemPath + "/CacheUtils.db");

Если вы хотите найти systemPath, вы можете использовать его на вашем Android или iOS

systemPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
Другие вопросы по тегам