我在Android应用程序中有一行内容,内容如下:
Intent intent = new Intent(this,MyView.class);
不幸的是,似乎有时会崩溃,但是我无法重现崩溃,可能是因为我不知道在什么情况下会失败。如您可能已经猜到的那样,崩溃是java.lang.NullPointerException
。
通过阅读其他解决方案,我发现可以将this
替换为getApplicationContext()
,但这仍然无济于事:
this
无法正常工作我当然假设是this
的问题-我假设MyView.class
永远不会为空,我认为这是正确的吗?
出于完整性考虑,我应该解释一下这是在回调中编写的。这是该功能的完整代码:
@Override
public void didReceiveLoginResponse(boolean status) {
if(status) {
Intent intent = new Intent(this,MyView.class);
startActivity(intent);
}
}
非常感谢您提供的有用建议!
编辑:明确地说,我不是在问nullPointerException是什么。我问这行在什么情况下会包含nullPointerException。如果视图不再存在,该函数将如何运行(确保空位将是视图/函数,而不是其中的特定行?)
答案 0 :(得分:1)
我的猜测是,异步任务完成时(也许有人启动然后快速回击),调用方Activity正在结束或已经结束,在这种情况下上下文不再有效。
尝试检查isFinishing()
答案 1 :(得分:0)
我想是因为我在某些异步任务(例如翻新Callback
(在回调中不可能使用this
)中看到它,所以您的回调有时会超出主范围的范围威胁活动,这就是为什么您无法获得this
个上下文实例的原因。无论如何,有时会发生而有时却不会发生。
我的建议是,如果可能的话,应将this
实例作为参数传递给Callback,
@Override
public void didReceiveLoginResponse(Activity activity, boolean status) {
if(status) {
Intent intent = new Intent(activity,MyView.class);
startActivity(intent);
}
}
答案 2 :(得分:0)
您应该使用MainActivity.this或任何活动名称进行修改。 例如
@Override
public void didReceiveLoginResponse(boolean status) {
if(status && MainActiity.this!=null) {
Intent intent = new Intent(MainActiity.this,MyView.class);
startActivity(intent);
}
}