3

いくつかの奇妙なログが表示されますが、これは明らかにAndroidでのみ発生します-バージョンが3未満のデバイス(エミュレーターで確認済み)。向きを変更し、onCreate()またはonRestoreInstanceState()がnullでないバンドルで呼び出されると、クラッシュしました

@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

この関数を使用するだけです。

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を作成し、このスレッドで回避策の1つを実装するだけです。 https://github.com/MvvmCross/MvvmCross/issues/1431

于 2016-09-19T13:32:04.007 に答える