2016-09-23 3 views
2

Alles, was ich erreichen möchte, ist Ausnahmen in meiner App zu fangen, so dass ich sie an einen Server senden kann. Ich habe herausgefunden, dass ich dies tun kann, indem ich meine benutzerdefinierte UncaughtExceptionHandler Basis auf nativem Android-Code in Java schrieb, antwortete here in StackOverflow.So schreiben Sie einen benutzerdefinierten UncaughtExceptionHandler in Xamarin.Android

Das ist mein CustomExceptionHandler Klasse:

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(); 
    } 
} 

Dann habe ich diese Klasse, um den DefaultUncaughtExceptionHandler in meinem Aktivität:

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

Ich weiß nicht, was ist falsch mit diesem Ansatz, es hat gebaut, aber ich habe eine ungültig CastException zur Laufzeit.

Error Image

Ich habe die gleichen Thread.IUncaughtExceptionHandler Schnittstellentypen für meine CustomExceptionHandler und der DefaultUncaughtExceptionHandler, aber warum bin ich diesen Fehler? Bitte erleuchte mich. Vielen Dank.

+1

Versuchen Sie eine 'JavaCast ' hier. https://developer.xamarin.com/api/member/Android.Runtime.Extensions.JavaCast%7BTResult%7D/p/Android.Runtime.IJavaObject/ –

+0

@JonDouglas Ich habe es verwendet. Thread.DefaultUncaughtExceptionHandler = Erweiterungen.JavaCast ( neuer CustomExceptionHandler (Thread.DefaultUncaughtExceptionHandler)); Aber immer noch bekomme ich den gleichen Fehler. – arvicx

Antwort

5

Und es schlägt wieder: D Dies ist ein häufiger Fehler. Sie müssen Java.Lang.Object erben, wenn Sie Java-Schnittstellen implementieren.

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

Definitiv die Antwort auf das Problem. Vielen Dank. :) – arvicx

Verwandte Themen