我得到了一些奇怪的日志,这显然只发生在版本低于3的Android设备上(使用模拟器检查)。 当您更改方向时,使用非空的Bundle调用onCreate()或onRestoreInstanceState()时它会崩溃
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_menu);}
if (savedInstanceState != null) {
mSlug = savedInstanceState.getString(KEY_SLUG, null);
}
}@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString(KEY_SLUG, mSlug);
}@Override
protected void onRestoreInstanceState(Bundle outState) {
super.onRestoreInstanceState(outState);
if (outState != null) {
mSlug = outState.getString(KEY_SLUG, mSlug);
}
}
LogCat-Log看起来像: http://i.stack.imgur.com/WbivQ.png 有没有人知道这里发生了什么?
答案 0 :(得分:8)
Bundle.getString仅在API级别12及更高版本中可用。您必须自己指定默认值,而不是将其作为参数传递。
您可以在以后通过点击“按API级别过滤”下拉菜单并在the documentation右上角选择相应的API级别来自行检查3>
答案 1 :(得分:3)
制作简单
mSlug = savedInstanceState.getString(KEY_SLUG, null);
与olders API兼容,只需将其替换为
即可mSlug = getIntent().hasExtra(KEY_SLUG) ? savedInstanceState.getString(KEY_SLUG) : null;
答案 2 :(得分:0)
只需使用此功能:
public static String getStringFromBundle(Bundle bundle, String key, String defaultValue){
if (Build.VERSION.SDK_INT < 12){
String returns = bundle.getString(key);
if(returns==null) returns = defaultValue;
return returns;
} else
return bundle.getString(key, defaultValue);
}
答案 3 :(得分:0)
编辑:已修复,请参阅下面的评论。
对于任何使用MvvmCross的人来说,有一个4.2.3的错误,这是由于这个原因。只需创建自己的FragmentCacheConfiguration并实现此线程中的一个解决方法。 https://github.com/MvvmCross/MvvmCross/issues/1431