visual-studio - Xamarin 窗体 MainActivity OnCreate LoadApplication System.NullReferenceException : Object reference not set to an instance of an object

标签 visual-studio xamarin visual-studio-2015 xamarin.android splash-screen

我正在使用 VS2015 和 Xamarin 创建一个多平台项目,该项目可以显示启动画面,然后在 web View 中加载网页。这是我的项目结构。我正在使用如下 PCL 项目类型:

enter image description here

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)应用程序()
{
初始化组件();
MainPage = new NavigationPage(new WebPageHoster() { Title = "Load Web-Page"});
}

这显示了启动屏幕,在设置 WebView 的 url 后返回到 OnCreate 方法并给出此错误
System.NullReferenceException: Object reference not set to an instance of an object

我无法找到导致此错误的原因。这是 Android list 文件。

<?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>

最佳答案

我测试了你的源代码和你的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

关于visual-studio - Xamarin 窗体 MainActivity OnCreate LoadApplication System.NullReferenceException : Object reference not set to an instance of an object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38025447/

相关文章:

visual-studio - 重置 Visual Studio C++ 项目的设置

visual-studio-2010 - 在 Visual Studio 2010 中 Clean/Build 成功时重建失败

asp.net-core - 如何在 Visual Studio 2015 RC 中为 ASP.NET 5 MVC 6 项目设置 TypeScript 编译器版本?

visual-studio-2015 - 当添加一个带有 "Add as Link"的现有项目时,这个文件不是在 VS2015 中编译的?

ios - 将 .ipa 上传到 iTunes Visual Studio Cordova 时出错

visual-studio - 在Visual Studio中将多行代码格式化为单行

c# - Xamarin Studio(在 OSX 上)还是 Visual Studio(在 Windows 上)?

azure - 在生产中存储 DocumentDB Endpoint 和 Key 的位置

c# - 在现有 Xamarin.Forms 共享应用程序中实现 Prism

c# - 防止 EDMX 合并冲突和 Cherry Picking 问题