我有一个"已保存的游戏选择器"用户打开已保存游戏的活动。我为结果启动活动,并将表示已保存游戏的字符串返回到父活动。
我使用过的代码并不复杂:
if(savedGameId != null) {
Intent result = new Intent();
result.putExtra("saved_game_key", savedGameId);
setResult(Activity.RESULT_OK, result);
finish();
}
在onActivityResult中:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
switch(requestCode) {
case SAVED_GAME_ACTIVITY:
if(resultCode == Activity.RESULT_OK) {
if(data.hasExtra("saved_game_key") {
String savedGameId = data.getExtra("saved_game_key");
...
} else {
// couldn't load game
}
}
break;
}
}
这对我的所有测试设备和模拟器都有100%的帮助。但是,我会定期收到data.hasExtra("saved_game_key")
电话的NPE崩溃报告。
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.content.Intent.hasExtra(java.lang.String)' on a null object reference
at com.xxxx.yyyy.MainActivity.onActivityResult(MainActivity.java)
at android.app.Activity.dispatchActivityResult(Activity.java:6508)
...
到目前为止我收到此报告的Android版本和设备:
我自己无法重现此问题。我将尝试获取上述设备之一,看看我是否可以获得更多信息。
与此同时,我搜索了google / stackoverflow,但未找到任何类似于此特定情况的内容。
我的问题
是否存在一些我忽略的边缘情况可能会导致返回的数据意图在某些情况下为空?
就像我说的那样,我自己从来没有能够重现这个问题,并且代码看起来是正确的,这是基于我从导入中返回数据时看到的其他示例。如果您需要更多信息,请给我留言。