3

我得到了一些奇怪的日志,这显然只发生在版本低于 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 有人知道这里发生了什么吗?

4

4 回答 4

8

带有 2 个参数的Bundle.getString仅在 API 级别 12 及更高版本中可用。您必须自己指定默认值,而不是将其作为参数传递。

您以后可以通过单击“按 API 级别过滤”下拉菜单并在文档的右上角选择适当的 API 级别来自行检查

于 2012-06-19T22:34:12.210 回答
3

制作简单

mSlug = savedInstanceState.getString(KEY_SLUG, null);

与较旧的 API 兼容,只需将其替换为

mSlug = getIntent().hasExtra(KEY_SLUG) ? savedInstanceState.getString(KEY_SLUG) : null;
于 2013-09-14T23:25:04.780 回答
0

Just use this function:

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);
}
于 2015-03-17T09:47:14.563 回答
0

编辑:已修复,请参阅下面的评论。

对于任何使用 MvvmCross 的人来说,从 4.2.3 开始就有一个错误,这是由于这个原因。只需创建您自己的 FragmentCacheConfiguration 并在此线程中实现其中一种解决方法。 https://github.com/MvvmCross/MvvmCross/issues/1431

于 2016-09-19T13:32:04.007 回答