6

Ich verwende VS2015 mit Xamarin, um ein Multi-Plattform-Projekt zu erstellen, das einen Splashscreen anzeigen und dann eine Webseite in eine Webansicht laden kann. Hier ist meine Projektstruktur. Ich bin mit einem PCL-Projekt geben, wie unten:Xamarin Forms MainActivity OnCreate LoadApplication System.NullReferenceException: Objektreferenz nicht auf eine Instanz eines Objekts eingestellt

enter image description here

TheApp (Portable)

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

Dies ist der Code in den 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 
    } 

Der LoadApplication Methodenaufruf in der OnCreate oben beschriebenen Methode lädt die app Konstruktor der App.xaml.cs Klasse, die den folgenden Code läuft

public App() { InitializeComponent(); MainPage = new NavigationPage (neuer WebPageHoster() {Title = "Web-Seite laden"}); }

Dies zeigt den Begrüßungsbildschirm und URL der WebView ist erreicht zurück in der OnCreate Methode nach der Einstellung und gibt diesem Fehler

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

Ich bin nicht in der Lage zu finden, was diesen Fehler verursacht. Hier ist die Android Manifest-Datei.

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

teilen sich die Quelle bitte. Sie sollten nicht zu viel Code in die Frage einfügen. – jzeferino

+0

von FormsApplicationActivity zu FormsAppCompatActivity geändert und ein neues Problem bekommen. Code auf Dropbox https://www.dropbox.com/s/p2snfvsyhhwopgn/STM-full.zip hochgeladen?dl = 0 – user20358

Antwort

12

ich Ihren Quellcode getestet und Ihre MainActivity leitet sich von FormsAppCompatActivity. In diesem Fall müssen Sie ein Thema angeben, das AppCompat verwendet.

Um das zu lösen, habe ich ein AppCompat Theme Ihre Stile:

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

und verwendet es dann auf Ihre MainActivity:

[Activity(Label = "Southern Travel", Theme = "@style/AppTheme", ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)] 
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity 
+0

Danke. Vielen Dank. War damit verrückt. Wo kann ich echte Dokumentation rund um Xamarin Forms erhalten? Es sieht so aus, als ob es sich um etwas Bestimmtes für eine bestimmte Zielplattform handelt. Selbst diese offizielle Dokumentation [https://developer.xamarin.com/samples/monodroid/SplashScreen/] auf der Xamarin-Site führt dieses Beispiel nicht im PCL-Format aus: – user20358

+0

@ user20358, die Einstellung eines SpalshScreen unterscheidet zwischen iOS und Android , könnte dieser Beitrag für Android helfen https://forums.xamarin.com/discussion/comment/91914/#Comment_91914 – Bonelol

+0

Es gibt hier ein gutes Tutorial zu diesem Thema für Android und iOS: http://codeworks.it/blog/? p = 294 – jzeferino

Verwandte Themen