我正在尝试在我的Android应用中做一个简单的全局异常处理程序,我遇到了麻烦:
public class TicTacToe extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Thread.currentThread().setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread thread, Throwable ex) {
Toast.makeText(this, "TOAST", Toast.LENGTH_LONG);
}
});
setContentView(R.layout.main);
}
}
我是Android和Java的新手,但在.NET中可行。我不能从java中的匿名方法访问局部变量吗?如果是这样,我该如何重写呢?
谢谢, 维塔利彼得
答案 0 :(得分:10)
你可以但不是这样。 this
被称为UncaughtExceptionHandler
对象。
将this
更改为TicTacToe.this
此外,您应该有编译时错误。不是吗?
答案 1 :(得分:2)
正如另一个答案中所提到的,诀窍是this
被遮蔽了。另一种解决方法是在外部类中添加一个返回this
的方法。
它意识到这会使类签名略微增加,但如果你保持方法私有,那似乎并不是什么大不了的事。有没有人对如何比其他解决方案更好或更差有评论?
public MyOuterClass {
private MyOuterClass getThis() {
return this;
}
private void outerClassMethod(new MyAnonymousClass() {
public void anonymousClassMethod() {
doSomething(getThis());
}
});
}