Xamarin Forms MainActivity OnCreate LoadApplication System.NullReferenceException: ссылка на объект не установлена ​​для экземпляра объекта

Я использую VS2015 с Xamarin для создания многоплатформенного проекта, который может показывать заставку и затем загружать веб-страницу в веб-просмотр. Вот моя структура проекта. Я использую тип проекта PCL, как показано ниже:

TheApp (Портативный)

-WebPageHoster.Xaml     //Contains a WebView control
   -WebPageHoster.Xaml.cs  //sets the WebView controls source property to load a webpage
   -App.Xaml
   -App.Xaml.cs

TheApp.Droid

/Resources/drawable/splashlogo.png
/Resources/drawable/icon3.png
/Resources/values/Styles.xml
-MainActivity.cs
-SplashActivity.cs     

TheApp.iOS

TheApp.WindowsPhone (Windows Phone 8.1)

Это код вStyles.xml

<?xml version="1.0" encoding="utf-8" ?> 
<resources>
    <style name="Theme.Splash" parent="android:Theme">
        <item name="android:windowBackground">@drawable/splashlogo</item>
        <item name="android:windowNoTitle">true</item>
    </style>
</resources>

SplashActivity.cs

[Activity(MainLauncher = true, NoHistory = true, Theme = "@style/Theme.Splash", Icon = "@drawable/icon3")]
public class SplashActivity : AppCompatActivity
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        var intent = new Intent(this, typeof(MainActivity));
        StartActivity(intent);
        Finish();
    }
}

MainActivity.cs

[Activity(Label = "Splash App",  ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsApplicationActivity
{
    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);
        global::Xamarin.Forms.Forms.Init(this, bundle);
        LoadApplication(new App());  // << Problem here
    }

LoadApplication вызов метода вOnCreate Метод выше загружает конструктор приложения класса App.Xaml.cs, который выполняет следующий код

public App () {InitializeComponent (); MainPage = new NavigationPage (new WebPageHoster () {Title = "Загрузить веб-страницу"}); }

Это показывает заставку и после установки URL-адреса WebView возвращается к методу OnCreate и выдает эту ошибку

System.NullReferenceException: Object reference not set to an instance of an object

Я не могу найти причину этой ошибки. Вот файл манифеста Android.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="TheApp.TheApp" android:installLocation="auto" android:versionCode="1">
    <uses-sdk android:minSdkVersion="15" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <application android:icon="@drawable/icon3" android:theme="@style/Theme.AppCompat" android:label="Splash Web Host"></application>
</manifest>
 jzeferino25 июн. 2016 г., 10:57
поделитесь источником пожалуйста. Вы не должны вставлять слишком много кода в вопросе.
 user2035825 июн. 2016 г., 17:53
изменил с FormsApplicationActivity на FormsAppCompatActivity и получил новую проблему. Код загружен в Dropboxdropbox.com/s/p2snfvsyhhwopgn/STM-full.zip?dl=0

Ответы на вопрос(1)

Решение Вопроса

Я проверил ваш исходный код и вашMainActivity происходит отFormsAppCompatActivity, В этом случае вы должны предоставить тему, которая используетAppCompat.

Чтобы решить это, я добавилAppCompat Тема для ваших стилей:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
    <item name="windowActionModeOverlay">true</item>
</style> 

А потом использовал его на своемMainActivity:

[Activity(Label = "Southern Travel", Theme = "@style/AppTheme", ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
 Bonelol28 июн. 2016 г., 04:56
@ user20358, настройка SpalshScreen отличается для iOS и Android, этот пост может помочь для Androidforums.xamarin.com/discussion/comment/91914/#Comment_91914
 jzeferino14 февр. 2018 г., 15:27
@AadhilAhmed вы должны прочитать полную стековую трассу и попытаться понять.
 Aadhil Ahmed13 февр. 2018 г., 06:36
Привет .. Мой код такой же, как ты сказал. Но все равно он показывает исключение нулевого указателя в этой строке (LoadApplication (new App ());) в mainActivity.cs.
 jzeferino28 июн. 2016 г., 09:35
Здесь есть хорошее руководство по этому для Android и iOS:codeworks.it/blog/?p=294
 Aadhil Ahmed15 февр. 2018 г., 06:37
Проблема была с файлом packages.config, который я нашел позже. Спасибо.
 user2035826 июн. 2016 г., 02:14
Спасибо. Спасибо. Схожу с ума от этого. Где я могу получить реальную документацию по Xamarin Forms? Кажется, где бы я ни смотрел, это что-то конкретное для конкретной целевой платформы. Даже это официальная документация [developer.xamarin.com/samples/monodroid/SplashScreen/] на сайте Xamarin не делает этот пример в форме PCL:

Ваш ответ на вопрос