2017-08-15 6 views
1

MvvmCrossでXamarin Formsアプリケーションを作成して、別のプロジェクトで発生しているエラーを見つけようとしました。このシンプルなアプリは以下のサイトから入手できます:https://github.com/selaromdotnet/XamFormsAppTestMvvmCrossとXamarinフォーム、アクセントの色を取得するとヌル参照エラーでAndroidアプリがクラッシュする

アイコンが付いたツールバーアイテムが1ページあります。

コミットの履歴を見ると、このプロジェクトはうまくロードされ、アイコンも表示されます。

しかし、最新のコミットでは、このガイド(https://blog.xamarin.com/material-design-for-your-xamarin-forms-android-apps/)とこの投稿(Xamarin.Forms null reference exception when applying Material Theme)を使用して、MvvmCrossをマテリアルデザインで使用するようにプロジェクトを更新しました。

は今アンドロイドアプリ、それがこのエラーでクラッシュしMvxFormsAppCompatActivityためのOnCreateメソッドに:

System.NullReferenceException: Object reference not set to an instance of an object. 
    at Xamarin.Forms.Forms.GetAccentColor() [0x00006] inC:\BuildAgent3\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\Forms.cs:159 
    at Xamarin.Forms.Forms.SetupInit (Android.Content.Context activity, System.Reflection.Assembly resourceAssembly) [0x0000c] in C:\BuildAgent3\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\Forms.cs:118 
    at Xamarin.Forms.Forms.Init (Android.Content.Context activity, Android.OS.Bundle bundle) [0x00006] in C:\BuildAgent3\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\Forms.cs:72 
    at MvvmCross.Forms.Droid.MvxFormsAndroidSetup.CreateViewPresenter() [0x00000] in C:\projects\mvvmcross\MvvmCross-Forms\MvvmCross.Forms.Droid\MvxFormsAndroidSetup.cs:55 
    at MvvmCross.Droid.Platform.MvxAndroidSetup.CreateViewDispatcher() [0x00000] in C:\projects\mvvmcross\MvvmCross\Droid\Droid\Platform\MvxAndroidSetup.cs:124 
    at MvvmCross.Core.Platform.MvxSetup.InitializeViewDispatcher() [0x00000] in C:\projects\mvvmcross\MvvmCross\Core\Core\Platform\MvxSetup.cs:260 
    at MvvmCross.Core.Platform.MvxSetup.InitializeSecondary() [0x000f8] in C:\projects\mvvmcross\MvvmCross\Core\Core\Platform\MvxSetup.cs:91 
    at MvvmCross.Core.Platform.MvxSetup.Initialize() [0x00006] in C:\projects\mvvmcross\MvvmCross\Core\Core\Platform\MvxSetup.cs:37 
    at MvvmCross.Droid.Platform.MvxAndroidSetupSingleton.EnsureInitialized() [0x0004e] in C:\projects\mvvmcross\MvvmCross\Droid\Droid\Platform\MvxAndroidSetupSingleton.cs:45 
    at MvvmCross.Forms.Droid.MvxFormsAppCompatActivity.OnCreate (Android.OS.Bundle bundle) [0x00013] in C:\projects\mvvmcross\MvvmCross-Forms\MvvmCross.Forms.Droid\MvxFormsAppCompatActivity.cs:64 
    at XamFormsAppTest.Droid.MainActivity.OnCreate (Android.OS.Bundle bundle) [0x00017] in D:\VisualStudio\OSS\XamFormsAppTest\XamFormsAppTest\XamFormsAppTest.Android\MainActivity.cs:21 
    at Android.Support.V4.App.FragmentActivity.n_OnCreate_Landroid_os_Bundle_(System.IntPtr jnienv, System.IntPtr native__this, System.IntPtr native_savedInstanceState) [0x0000f] in 8b5e0f4c6f594871ab0afcbcb2317289>:0 
    at (wrapper dynamic-method) System.Object:6ce77b2f-ee95-4ad0-bd89-6baa2e4d7b05> (intptr,intptr,intptr) 

私はそれがリソースで正しく色を見つけていない推測しているが、私はどのようにのために途方に暮れていますこの問題のトラブルシューティングを行います。私はファイル名をcolor.xmlに変更しようとしましたが、アクセントカラーを@ color/accentへの参照の代わりに色として定義しようとしました...

私は本当にここにこだわっています。私のプロジェクトに何が間違っているのか誰にでも教えてくれますか?

答えて

1

Object reference not set to an instance of an object.

まず、あなたがXamarin.FormsMvvmCrossプロジェクトを作成するOfficial tutorialを読んだことを確認してください。 MvvmCross Formsプロジェクトの作成方法については、sampleをご覧ください。文書に従ってMainPage.xamlコードを変更してください。

MainActivity.OnCreate --> MvxFormsAppCompatActivity.OnCreate --> .. --> Init --> SetupInit --> GetAccentColor 

時にシステムコールMainActivity.OnCreate方法それがnullだったので、私たちはあなたのMainActivityはしていないため、リソースに正しく色を見つけないことを推測することができます。私たちは、NullReferenceExceptionが注文を持っていることを見つけることができる

初期化されました。準備後にMainActivityOnCreateメソッドに呼び出す必要があります。 リソースを初期化するには、SplashScreenを追加する必要があります。ここで

は私のコードです:あなたNullReferenceExceptionが消えてしまいます、そして、

[Activity(
    Label = "MvxForms" 
    , MainLauncher = true 
    , Icon = "@drawable/icon" 
    , NoHistory = true 
    , ScreenOrientation = ScreenOrientation.Portrait)] 
public class SplashScreen : MvxSplashScreenActivity 
{ 
    public SplashScreen() 
     : base(Resource.Layout.SplashScreen) 
    { 
    } 

    protected override void TriggerFirstNavigate() 
    { 
     StartActivity(typeof(MainActivity)); 
     base.TriggerFirstNavigate(); 
    } 
} 

が、これをやった後、そのはまだ持っているException

FATAL UNHANDLED EXCEPTION: MvvmCross.Platform.Exceptions.MvxException: 
Problem seen creating View-ViewModel lookup table 
- you have more than one View registered for the ViewModels: 2*MainViewModel (MainActivity,MainPage) 
---> System.ArgumentException: An item with the same key has already been added. 

If your ViewModel is called MainViewModel and your Forms page is too, you might get a name conflict because MvvmCross will have 2 view to viewmodel lookups. You can prevent this by naming your Activity differently like "FormsActivity.cs".

ます。また、名前を変更することができMainViewModelMvxMainViewModel(好きなもの)、この例外は表示されなくなります。

+0

@SelAromDotNetこの問題は解決しましたか? –

関連する問題