6

Używam VS2015 z Xamarinem do utworzenia projektu wieloplatformowego, który może wyświetlać ekran powitalny, a następnie ładować stronę internetową w widoku sieci Web. Oto moja struktura projektu. Używam projekt PCL typu jak poniżej:Xamarin Forms MainActivity OnUtwórz LoadApplication System.NullReferenceException: Odwołanie do obiektu nie jest ustawione na instancję obiektu

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)

jest to kod w 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 
    } 

Wezwanie LoadApplication sposób w metodzie OnCreate powyżej ładuje konstruktora aplikacji klasy App.Xaml.cs która biegnie następujący kod

publicznego app() { InitializeComponent(); MainPage = new NavigationPage (new WebPageHoster() {Title = "Załaduj stronę WWW"}); }

To pokazuje ekran powitalny, a po ustawieniu adresu URL Webview sięga wstecz do sposobu OnCreate i daje ten błąd

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

nie jestem w stanie znaleźć to, co jest przyczyną tego błędu. Oto plik z Androidem Manifest.

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

zakładowy źródło proszę. nie powinieneś wklejać zbyt wiele kodu w pytaniu. – jzeferino

+0

zmieniono z FormsApplicationActivity na FormsAppCompatActivity i otrzymałem nowy problem. Kod przesłany do Dropbox https://www.dropbox.com/s/p2snfvsyhhwopgn/STM-full.zip?dl = 0 – user20358

Odpowiedz

12

Przetestowałem kod źródłowy i twój MainActivity wywodzi FormsAppCompatActivity. W takim przypadku musisz podać motyw, który używa AppCompat.

Aby rozwiązać, że I dodaje AppCompat motyw do stylów:

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

a następnie wykorzystywane na własną MainActivity:

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

Dziękuję. Dziękuję Ci. Szaleje z tego powodu. Gdzie mogę uzyskać prawdziwą dokumentację dotyczącą Xamarin Forms? Wygląda na to, że gdziekolwiek spojrzę na coś konkretnego na konkretną platformę docelową. Nawet ta oficjalna dokumentacja [https://developer.xamarin.com/samples/monodroid/SplashScreen/] na stronie Xamarin nie robi tego przykładu w formularzu PCL: – user20358

+0

@ user20358, ustawienie SpalshScreen jest inne między iOS i Androidem , ten post może pomóc dla Androida https://forums.xamarin.com/discussion/comment/91914/#Comment_91914 – Bonelol

+0

Tutaj jest dobry samouczek na ten temat dla Androida i iOS: http://codeworks.it/blog/? p = 294 – jzeferino

Powiązane problemy