Выпуск Xamarin Forms + MvvmCross на платформе - PullRequest
0 голосов
/ 21 сентября 2018

Я нахожусь в процессе обновления приложения с Xamarin Forms 2.4 до 3.2 и интеграции MvvmCross 6.2 в приложение Xamarin Forms.

Обновление Forms 3.2 прошло без проблем, обновленное приложение работало нормально,Но я споткнулся во время интеграции с MvvmCross.

При попытке отладить приложение доходит до точки останова в моем коде на этой строке:

return NavigationService.Navigate<LoginViewModel>();

MvvmCross кажется счастливым, поскольку яполучить шаг в код LoginViewModel.Тем не менее, когда он пытается отобразить экран, приложение взрывается со следующим исключением:

Исключение - Основные моменты

NullReferenceException
Xamarin.Forms.Platform.Android.IPlatformLayout.OnLayout(...)
Xamarin.Forms.Platform.Android\AppCompat\Platform.cs:214

Глядя на строку 214 здесь показывает:

Android.Platform.GetRenderer(Page).UpdateLayout();

Первое, что я сделал, проверил весь код в моих пользовательских средствах визуализации и все выглядит нормально.

Затем я удалил все экземпляры своих пользовательских средств визуализации из LoginView.Xaml, но проблема сохраняется.Это привело меня к мысли, что в конфигурации я что-то упускаю.

В моем классе настройки Android у меня есть этот код:

protected override IMvxAndroidViewPresenter CreateViewPresenter()
{
    return new MvxAppCompatViewPresenter(AndroidViewAssemblies);
}

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

Буду признателен за любые идеи о том, что нужно проверить, или об известном решении.Мне не удалось настроить что-либо, чтобы я мог пошагово пройти через код Xamarin.Forms, так как получить контроль над тем, что является нулем, оказывается неловко.

Исключение - Дополнительная информация

 UNHANDLED EXCEPTION:
 System.NullReferenceException: Object reference not set to an instance of an object.
   at Xamarin.Forms.Platform.Android.AppCompat.Platform.Xamarin.Forms.Platform.Android.IPlatformLayout.OnLayout (System.Boolean changed, System.Int32 l, System.Int32 t, System.Int32 r, System.Int32 b) [0x00017] in D:\a\1\s\Xamarin.Forms.Platform.Android\AppCompat\Platform.cs:214
   at Xamarin.Forms.Platform.Android.PlatformRenderer.OnLayout (System.Boolean changed, System.Int32 l, System.Int32 t, System.Int32 r, System.Int32 b) [0x0000e] in D:\a\1\s\Xamarin.Forms.Platform.Android\PlatformRenderer.cs:73 
   at Android.Views.ViewGroup.n_OnLayout_ZIIII (System.IntPtr jnienv, System.IntPtr native__this, System.Boolean changed, System.Int32 l, System.Int32 t, System.Int32 r, System.Int32 b) [0x00009] in <b72bf8f25b8d497a89864a71b1ed8899>:0 
   at (wrapper dynamic-method) System.Object.40(intptr,intptr,bool,int,int,int,int)
JNI RegisterNativeMethods: attempt to register 0 native methods for android.runtime.JavaProxyThrowable

1 Ответ

0 голосов
/ 22 сентября 2018

Для любого, кто найдет это в будущем ...

Все прочтения, которые я сделал по этому поводу, показывают, что это исключение по сути вводит в заблуждение.Из всех решений, которые я читал в сети, каждое из них имело разные значения. Это означает, что существует целый набор основных причин, которые приводят к одной и той же ошибке.

В моем случае во время миграции кода, который я пренебрег удалениемстарая строка кода в моем MainActivity.cs:

LoadApplication(new App())

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

Метод все еще действителен, поскольку он не был помечен как устаревший, поэтому компилятор никогда не отмечал его как проблемный.

...