我正在尝试使用Catel 4.5.4创建一个示例Xamarin.Android C#应用程序。 它由Activity,View Model类和Application类组成。 (最后的代码)
当我运行它时,我收到以下错误:
10-23 13:41:04.890 I / MonoDroid(8769):System.NotSupportedException:无法激活Java类型'md5b251e24e9fff919bf177c55c6e30cd8e / MainActivity'的JNI句柄0x6ec00025(key_handle 0x41ed37d8)作为托管类型'Test.Views.MainActivity' 。 ---> System.NotSupportedException:为了支持Android中的导航事件,Catel使用自定义ActivityLifecycleCallbacksListener。这需要一个app实例。请确保Android应用包含应用类。
完整调试日志 https://pastebin.com/UZHhVHfL
该错误似乎来自Catel源代码中的这一行:
var activity = GetNavigationTarget<Activity>();
var application = activity.Application;
if (application == null)
{
const string error = "To support navigation events in Android, Catel uses a custom ActivityLifecycleCallbacksListener. This requires an app instance though. Please make sure that the Android app contains an Application class.";
Log.Error(error);
-->throw new NotSupportedException(error);
这里activity.Application为null。我该如何解决这个问题?
我已尝试使用以下Catel版本的代码:
4.1.0 - 代码工作
4.2.0 - 代码工作
4.5.0 - 代码工作
4.5.1 - 错误
4.5.4 - 错误
我必须使用4.5.4,因为在修复此问题后,我想将现有的WPF + Catel(4.5.4)Windows应用程序移植到Android。
以下是代码的相关部分:
查看/ MainActivity.cs
using Android.App;
using Android.OS;
using Android.Util;
namespace Test.Views
{
[Activity(Label = "Test", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Catel.Android.App.Activity
{
protected override void OnCreate(Bundle bundle)
{
Log.Debug("MainActivity", "Activity onCreate Called");
base.OnCreate(bundle);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.Main);
}
}
}
MyApp.cs
我因为错误而创建了这个类,但它没有解决问题。我应该在构造函数中添加任何内容吗?或覆盖任何其他功能?
using System;
using Android.App;
using Android.Runtime;
using Android.Util;
namespace Test
{
[Application(Debuggable = true, Label = "Test App")]
class MyApp : Catel.Android.App.Application
{
public MyApp(IntPtr javaReference, JniHandleOwnership transfer) : base(javaReference, transfer)
{
}
public override void OnCreate()
{
base.OnCreate();
Log.Error("MyApp", "Application onCreate Called");
}
}
}
答案 0 :(得分:0)
我们建议使用catel 5.x,4.x将不会收到任何新功能和/或修补程序。您甚至可以使用Xamarin.Forms(我们通过.NET Standard 2.0在5.3中添加了支持)。
确保在活动之前实际实例化应用程序类。然后它应该工作。