0

我正在开发一个扫描条形码的应用程序,当它成功扫描时,它将显示一个包含已扫描代码的对话框,并且根据条形码/二维码中包含的内容,它将显示一个打开浏览器的按钮,发送短信等。当对话框显示时,如果屏幕改变方向,它会崩溃。我已经让它在崩溃之前可以改变几次方向,但是当我检查 LogCat 时,它说 NullPointerException 导致了 FC。在我实施@CommonsWare 的建议之前,我可以让它在崩溃之前旋转任意次数,但是因为我已经实施了它们,所以它总是在第二次方向改变时发生 FC。当我在debug mode我可以随心所欲地旋转手机多次,但只要我在正常模式下启动它,它总是会崩溃。

类字段:

private String currentType;

我实现了onSaveInstanceState()

@Override
public void onSaveInstanceState(Bundle outState){
    super.onSaveInstanceState(outState);    
    outState.putString("savedType", currentType);
}

还有onRestoreInstanceState()

@Override
public void onRestoreInstanceState(Bundle savedInstanceState){
    super.onRestoreInstanceState(savedInstanceState);
    currentType = savedInstanceState.getString("savedType");
}

更新


根据@CommonsWare 的建议,我已将上述代码更新为当前的代码。为了完整性,我还编辑了我的帖子。

我也在使用 CM7(Android 版本 - 2.3.7,内核版本 - 2.6.37.6-cyanogenmod-g0799e00 android@portatile #1,Mod 版本 - CyanogenMod-7-11152011-NIGHTLY-N1,内部版本号 - GWK74)。

4

1 回答 1

1

在 onPause() 中,我使用了 this.onRetainNonConfigurationInstance() 来尝试解决这个问题,但它似乎没有产生任何影响。

你不叫onRetainNonConfigurationInstance()。安卓来电onRetainNonConfigurationInstance()

根据我读过的有关处理方向更改的所有帖子,我想这在我看来也应该有效。

您需要使用更好的资源。

要尝试修复您的代码:

步骤#1:从清单中删除android:configChanges属性<activity>

步骤#2:删除您的onConfigurationChanged()方法

步骤#3:要么将你的onResume()逻辑移入onCreate()populate currentType,要么不要尝试使用currentTypebeforeonResume()

更好的是用 / 替换你的整个/ ,onRetainNonConfigurationInstance()把你的.getLastNonConfigurationInstance()onSaveInstanceState()onRestoreInstanceState()StringBundle

这是一个示例项目,演示了onSaveInstanceState(). 这是一个示例项目,演示了onRetainNonConfigurationInstance().

于 2012-01-16T17:23:12.020 回答