带有 MvvmCross 的 Xamarin.Android 上的 System.InvalidCastException

Posted

技术标签:

【中文标题】带有 MvvmCross 的 Xamarin.Android 上的 System.InvalidCastException【英文标题】:System.InvalidCastException on Xamarin.Android with MvvmCross 【发布时间】:2017-07-10 04:59:35 【问题描述】:

我的 android 应用在生产环境中崩溃,我们的崩溃报告工具是 XamarinInsights,它会转储以下堆栈

at (wrapper castclass) System.Object:__castclass_with_cache (object,intptr,intptr) 在 MvvmCross.Droid.Support.V7.AppCompat.MvxAppCompatActivity1[TViewModel].get_ViewModel () [0x00006] in <76c7f3cdfddd459898d814608e83832e>:0 at AnyNameSpace.BaseActivity1[TViewModel].get_Context () [0x00000] 在 :0 在 AnyNameSpace.BaseActivity`1[TViewModel].OnCreate (Android.OS.Bundle bundle) [0x00015] in :0 在 AnyNameSpace.ProfileView.OnCreate (Android.OS.Bundle 包) [0x00000] 在 :0 在 Android.Support.V4.App.FragmentActivity.n_OnCreate_Landroid_os_Bundle_ (System.IntPtr jnienv, System.IntPtr native__this, System.IntPtr native_savedInstanceState) [0x00011] 在 :0 在(包装器动态方法) System.Object:dd3ad951-7481-46d2-860d-a9601d351cd2 (intptr,intptr,intptr)

这是引发异常的位置

    public class ProfileView : BaseAppActivity<ProfileViewModel>
    
        protected override void OnCreate(Bundle bundle)
        
             base.OnCreate(bundle);
             SetContentView(Resource.Layout.ProfileView);
             Title = string.Format("0 | 1", Title, Context.Version);
        
    

BaseAppActivity:BaseActivity

        protected override void OnCreate(Bundle bundle)
        
       SupportRequestWindowFeature((int)WindowFeatures.IndeterminateProgress);
        base.OnCreate(bundle);
        RegisterBaseViewReceiver();

        if (Context != null)
        
            Context.OnLoaded();
        

和BaseActivity

    public class BaseActivity<TViewModel> : MvxAppCompatActivity<TViewModel>
    where TViewModel : BaseViewModel
    
         public TViewModel Context
         
            get
            
                return (TViewModel)base.ViewModel;
            
         
    

抛出异常

    return (TViewModel)base.ViewModel;

但我无法在发布和调试配置中重现此崩溃,我只能在崩溃报告系统中看到此错误。有什么想法吗?

【问题讨论】:

仅供参考,GitHub Issues 上也对此问题进行了一些讨论。 【参考方案1】:

这是 MvvmCross 中的 known bug,由从视图模型缓存中获取的无效模型引起。复制步骤在链接的 GitHub 问题中。

【讨论】:

以上是关于带有 MvvmCross 的 Xamarin.Android 上的 System.InvalidCastException的主要内容,如果未能解决你的问题,请参考以下文章

MvvmCross Xamarin Android 在初始屏幕上挂起并带有链接

如何使用带有 MvvmCross MvxTabsFragmentActivity 的 Android Xamarin 创建选项卡

MvvmCross Android UI 组件

在 mvvmcross 中显示非视图/视图模型的视图

将 Xamarin.UITest 与 MvvmCross 绑定一起使用

在 Xamarin.Android 和 MvvmCross 中定义应用程序类的基类