2017-10-25 6 views
0

Catel 4.5.4를 사용하는 샘플 Xamarin.Android C# 응용 프로그램을 만들려고합니다. 활동,보기 모델 클래스 및 응용 프로그램 클래스로 구성됩니다. (끝 코드)Catam 4.5.4 Xamarin.Android - 오류 - System.NotSupportedException : JNI 핸들을 활성화 할 수 없습니다.

내가 그것을 실행하면, 나는 다음과 같은 오류 얻을 :

10-23 13:41:04.890 I/MonoDroid(8769): System.NotSupportedException: Could not activate JNI Handle 0x6ec00025 (key_handle 0x41ed37d8) of Java type 'md5b251e24e9fff919bf177c55c6e30cd8e/MainActivity' as managed type 'Test.Views.MainActivity'. ---> System.NotSupportedException: 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.

전체 디버그 로그 : 오류가이 라인에서 오는 것 같다 https://pastebin.com/UZHhVHfL

Catel 소스 코드 :

https://github.com/Catel/Catel/blob/hotfix/4.5.4/src/Catel.MVVM/Catel.MVVM.Shared/MVVM/Navigation/NavigationAdapter.phone.android.cs#L210

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 - 오류

이 문제를 수정 한 후 기존 WPF + Catel (4.5.4) Windows 응용 프로그램을 Android로 포팅해야하므로 4.5.4를 사용해야합니다. 나는 때문에의이 클래스를 생성

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

조회수/MainActivity.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
  1. 우리는 catel 전 5.x를 사용하는 것이 좋습니다, 4.x의 어떤 새로운 기능 및/또는 핫픽스를받을 수 없습니다. Xamarin.Forms (.NET Standard 2.0을 통해 5.3에서 지원을 추가하고 있습니다)로 갈 수도 있습니다.

  2. 실제 응용 프로그램 클래스 이 활성화되기 전에 활동이 인스턴스화되었는지 확인하십시오. 그렇다면 그것이 작동합니다.

+0

"Application onCreate Called"로그 메시지가 디버그 로그에 인쇄되기 때문에 이미 Application 클래스 인스턴스가 있다고 가정했습니다. 다른 인스턴스를 수동으로 만들어야합니까? 그렇다면 Catel Application 클래스 생성자의 두 매개 변수는 어디에 있습니까? – emil