Uygulamam için bir varsayılan işleyici eklemeye çalışıyorum, bu nedenle işlenmeyen özel durumlardan kurtarılamıyorum.MonoDroid: İşlenmemiş İstisna Kurtarma
Android/MonoDroid tarafından sağlanan, söyleyebildiğim kadarıyla, bunu mümkün kılan, ancak bunların hiçbirini işe alamayacak olan üç mekanizma buldum. İşte kodum:
using System;
using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
namespace TestApp {
[Android.App.Activity(Label = "TestApp", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity {
protected override void OnCreate(Bundle bundle) {
base.OnCreate(bundle);
SetContentView(new LinearLayout(this));
//set up handlers for uncaught exceptions:
//Java solution
Java.Lang.Thread.DefaultUncaughtExceptionHandler = new ExceptionHandler(this);
//MonoDroid solution #1
AndroidEnvironment.UnhandledExceptionRaiser += AndroidEnvironment_UnhandledExceptionRaiser;
//MonoDroid solution #2
AppDomain.CurrentDomain.UnhandledException += delegate { new Alert(this, "AppDomain.CurrentDomain.UnhandledException", "error"); };
//throw an exception to test
throw new Exception("uncaught exception");
}
void AndroidEnvironment_UnhandledExceptionRaiser(object sender, RaiseThrowableEventArgs e)
{
//found a suggestion to set the Handled flag=true, but it has no effect
new Android.Runtime.RaiseThrowableEventArgs(e.Exception).Handled = true;
new Alert(this, "AndroidEnvironment.UnhandledExceptionRaiser", "error");
}
}
public class ExceptionHandler : Java.Lang.Object, Java.Lang.Thread.IUncaughtExceptionHandler {
private Context _context;
public ExceptionHandler(Context c) { _context = c; }
public void UncaughtException(Java.Lang.Thread thread, Java.Lang.Throwable ex) {
new Alert(_context, "java exception handler");
}
}
public class Alert {
public Alert(Context c, string src, string title = "alert") {
Android.App.AlertDialog.Builder builder = new Android.App.AlertDialog.Builder(c);
builder.SetTitle(title);
builder.SetMessage(src);
builder.SetPositiveButton("Ok", delegate { });
Android.App.AlertDialog alert = builder.Create();
alert.Show();
}
}
}
Herhangi bir yardım için teşekkür ederiz, teşekkürler!
Hiç bu işe yaramadı mı? Başvurumda hata ayıklama yapıldığında benzer sorunlar görüyorum. “AndroidEnvironment” ın, “AppDomain” nin yapmasından önce yakalanmamış istisnaları çağırdığını ve işlediğini söyleyebilirim. –
"Handled flag = true" ayarının yolu bu değil, "e.Handled = true;' ...: -B olmalıdır. –