web-dev-qa-db-ja.com

Bundle.getString(String key)のデフォルト値

Bundleからのゲッターのほとんどはデフォルト値を含めることができますが、その特定のバンドルインスタンスにキーが存在しない場合、getStringは存在しないことに気づきました。その可能性があり、その場合はnullを返します。

理由とそれに対する簡単な解決策があるかどうかについてのアイデアはあります(簡単に言うと、個々の値をチェックしたり、Bundleクラスを拡張したりする必要がないことを意味します)。

例として、今あなたはこれだけを持っています:

bundle.getString("ITEM_TITLE");

私がしたい間:

bundle.getString("ITEM_TITLE","Unknown Title");

ありがとう!

13
Víctor Penela

自分でラップする必要があります。

public String getBundleString(Bundle b, String key, String def)
{
    String value = b.getString(key);
    if (value == null)
        value = def;
    return value;
}
14
trojanfoe

Trojanfoeは、それが必要な場合に最適なソリューションを提供しますが、他のデータ型のデフォルトを処理するようになると、それらすべてに対して同じことを行う必要があります。

別の解決策は、バンドルにキーが含まれているかどうかを確認することです。

String myString = bundle.containsKey("key") ? bundle.getString("key") : "default";

関数ほど良くはありませんが、必要に応じていつでもラップできます。

27
csaunders

注: http://developer.Android.com/reference/Android/os/Bundle.html

public String getString (String key, String defaultValue)

以来:APIレベル12

編集この関数はBaseBundleに移動しました: ここ

別の解決策は、nullをチェックすることです。

String s = bundle.getString("key");
if (s == null) s = "default";

Bundleにはそれぞれのキーを含めることができますが、異なるタイプ(たとえば、int)にすることができるため、これはcsaundersのソリューションよりも優れています。その場合、彼のソリューションはmyStringは、"default"ではなくnullになります。

8
Felix