2016-09-23 7 views
2

달성하려는 모든 사항은 응용 프로그램에서 예외를 catch하여 서버로 보낼 수 있습니다. 내 사용자 정의를 작성하여이 작업을 수행 할 수 있다고 알았습니다. UncaughtExceptionHandler Java의 네이티브 Android 코드에이 기본으로 StackOverflow에서 here으로 응답했습니다.Xamarin.Android에서 사용자 정의 UncaughtExceptionHandler를 올바르게 작성하는 방법

이 내 CustomExceptionHandler 클래스 : 다음

public class CustomExceptionHandler : Thread.IUncaughtExceptionHandler 
{ 
    public IntPtr Handle { get; private set; } 

    public CustomExceptionHandler(Thread.IUncaughtExceptionHandler exceptionHandler) 
    { 
     Handle = exceptionHandler.Handle; 
    } 

    public void UncaughtException(Thread t, Throwable e) 
    { 
     // Submit exception details to a server 
     ... 

     // Display error message for local debugging purposes 
     Debug.WriteLine(e); 
    } 

    public void Dispose() 
    { 
     throw new NotImplementedException(); 
    } 
} 

활동DefaultUncaughtExceptionHandler을 설정하려면이 클래스를 사용 : 나는 무엇을 모르는

// Set the default exception handler to a custom one 
Thread.DefaultUncaughtExceptionHandler = new CustomExceptionHandler(
    Thread.DefaultUncaughtExceptionHandler); 

이 접근 방식에 문제가있어 빌드가되었지만 잘못되었습니다. 런타임시 CastException.

Error Image

나는 나의 CustomExceptionHandlerDefaultUncaughtExceptionHandler에 대해 동일한 Thread.IUncaughtExceptionHandler 인터페이스 유형이 있지만, 내가 왜이 오류는 무엇입니까? 제발 저를 계몽하십시오. 고맙습니다.

+1

여기에서'JavaCast '을 사용해보십시오. https://developer.xamarin.com/api/member/Android.Runtime.Extensions.JavaCast%7BTResult%7D/p/Android.Runtime.IJavaObject/ –

+0

@JonDouglas 나는 이것을 사용했다. Thread.DefaultUncaughtExceptionHandler = Extensions.JavaCast ( 새로운 CustomExceptionHandler (Thread.DefaultUncaughtExceptionHandler)); 하지만 여전히 같은 오류가 발생합니다. – arvicx

답변

5

그리고 다시 공격합니다 : D 이것은 흔히 저지르는 실수입니다. Java 인터페이스를 구현하려면 Java.Lang.Object을 상속해야합니다.

public class CustomExceptionHandler : Java.Lang.Object, Thread.IUncaughtExceptionHandler 
{ 
    public void UncaughtException(Thread t, Throwable e) 
    { 
     // Submit exception details to a server 
     ... 

     // Display error message for local debugging purposes 
     Debug.WriteLine(e); 
    } 
} 
+0

확실히 문제의 해답입니다. 고맙습니다. :) – arvicx

관련 문제