met*_*ter 9 null android pointers exception
我写了一个应用程序,现在,发布后,我的一些用户似乎遇到了一个令人讨厌的错误.一个我根本无法重现的.
参与其中的是三项活动.
活动1:SuperActivity
public abstract class SuperActivity extends Activity
Run Code Online (Sandbox Code Playgroud)
活动2:MainActivity
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);
}
Run Code Online (Sandbox Code Playgroud)
活动3:ListDialogActivity
public class ListDialogActivity extends SuperActivity
Run Code Online (Sandbox Code Playgroud)
我在这里做的是从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.
}
Run Code Online (Sandbox Code Playgroud)
所以这就是我的MainActivity中的onListDialogClick()被调用的方式(所以你可以把它想象成普通的onActivityResult()).在那里,一些用户遇到空指针异常,因为myMemberVariable为null.
我无法弄清楚这里发生了什么.此外,我正在保存我的实例状态以处理电话轮换,但即使我没有,因为onCreate将被调用,它仍然不会为null,它只会丢失它的状态并从初始Intent重新创建.
任何人都可以向我解释这是怎么可能的,这里发生了什么?我是否想念Android中的某些内容?为什么只发生在少数人身上?这可能是什么原因?即使是最微小的建议,我也会非常感激.
非常感谢!
Wal*_*ale 12
zapl是正确的,因为你必须在onSaveInstanceState中保存值,在我的情况下,我正在onCreate()中恢复运行BEFORE onActivityResult,所以不再有NullPointerExceptions!
你现在可能已经对此进行了排序,但我遇到了同样问题的麻烦.我的应用程序启动相机拍照,然后将捕获的文件复制到应用程序中的currentDirectory.偶尔拍摄照片时,我在onActivityResult中获得了NullPointerExceptions.
我花了一段时间才意识到活动一定是被Androids内存管理所杀死,并重新创建,因此失去了我所有的成员变量.这并不明显(对Android进行这种无缝杀死/恢复的帽子!).这是在HTC Desire HD上发生的,并且非常随机,很难追踪到.
| 归档时间: |
|
| 查看次数: |
2704 次 |
| 最近记录: |