Android onActivityResult。成员变量有时为空
我已经编写了一个应用程序,现在发布后,我的一些用户似乎遇到了一个严重的bug。一个我根本无法复制的东西 这涉及三项活动 活动1:超活性Android onActivityResult。成员变量有时为空,android,exception,pointers,null,Android,Exception,Pointers,Null,我已经编写了一个应用程序,现在发布后,我的一些用户似乎遇到了一个严重的bug。一个我根本无法复制的东西 这涉及三项活动 活动1:超活性 public abstract class SuperActivity extends Activity 活动2:主要活动 public class MainActivity extends SuperActivity { private MyObject myMemberVariable; @Override public void
public abstract class SuperActivity extends Activity
活动2:主要活动
public class MainActivity extends SuperActivity {
private MyObject myMemberVariable;
@Override
public void onCreate(Bundle savedInstanceState) {
//Get the intent that started this activity. I am always providing Extras, so this is never null.
Bundle bundle = getIntent().getExtras();
//Set stuff in myMemberVariable from these extras. This never fails either.
myMemberVariable = BundleLoader.loadFromBundle(bundle);
}
@Override
public void onListDialogClick(int requestCode, String[] options, int position, String extra) {
//THIS is the place where, according to my stacktrace from the DeveloperConsole, the null pointer arises.
myMemberVariable.setXY(position);
}
活动3:ListDialogActivity
public class ListDialogActivity extends SuperActivity
我在这里做的是从MainActivity启动ListDialogActivity,向用户提供一些选择。一旦他做出选择,ListDialogActivity将设置一个结果,然后完成。在SuperActivity中,我得到:
onActivityResult(int requestCode, int resultCode, Intent data) {
//if activityRequestCode was ListDialogRequestCode and the Result was RESULT_OK, then call onListDialogClick(..) with the appropriate values.
}
这就是调用my MainActivity中onListDialogClick()的方式(因此您可以将其视为正常的onActivityResult()。在这里,一些用户会遇到null指针异常,因为myMemberVariable为null
我不知道这里发生了什么。此外,我正在保存我的实例状态以处理电话轮换,但即使我没有这样做,因为onCreate将被调用,它仍然不会为null,它只会丢失其状态并根据最初的意图重新创建
谁能给我解释一下这是怎么可能的,这里发生了什么?我是不是误解了安卓的一些东西?为什么它只发生在少数人身上?这可能是什么原因?即使是最微小的建议,我也会非常感激
非常感谢 zapl是正确的,因为您必须将值保存在onSaveInstanceState中,在我的例子中,我正在onCreate()中恢复,它在onActivityResult之前运行,因此没有更多的NullPointerException 你现在可能已经解决了这个问题,但我在同一个问题上遇到了很多麻烦。我的应用程序启动相机拍照,然后将捕获的文件复制到应用程序中的currentDirectory中。偶尔在拍摄照片时,我会在onActivityResult中看到NullPointerException
我花了一段时间才意识到该活动一定是被Androids内存管理杀死了,然后重新创建,从而丢失了所有成员变量。这一点并不明显(为Android如此无缝的杀戮/恢复致敬!)。这是在HTC Desire HD上发生的,随机性很强,很难追踪到。发生这种情况的设备有什么共同因素吗?我还没有找到一个共同因素(我确定发生在有CM9的Galaxy S2和有HTC one x的人身上。)但除此之外,我不知道,因为开发人员控制台没有向我显示bug来自哪些设备?在代码中,我可以看到它总是
null
,因为它等于private MyObject myMemberVariable=null代码>它在onCreate中初始化。看来我在简化代码方面做得太过分了。实际上,它是通过一个静态类从Bundle加载的。如果该类因为包中没有合适的数据而返回null,它将在那里抛出异常。但这种情况从未发生过。(我现在将在我的评论中反映出来。谢谢)原因是:非常感谢你的回答!我也有同样的问题,但我无法解决。干得好;)哇,5年后,仍然相关,救了我的命;谢谢你。真是一只难以捉摸的虫子!