Bundle.getString(String key)的默认值

Víc*_*ela 13 android bundle

我刚刚注意到,虽然来自a的大多数getter Bundle都有可能包含一个默认值,但是如果该特定bundle实例中不存在该键,getString则没有那种可能性,如果是这种情况则返回null.

关于为什么会有这样的想法以及是否有某种方法可以轻松解决这个问题(简单来说,我的意思是不必检查每个单独的值或扩展Bundle类).

例如,现在你只有这个:

bundle.getString("ITEM_TITLE");
Run Code Online (Sandbox Code Playgroud)

虽然我想这样做:

bundle.getString("ITEM_TITLE","Unknown Title");
Run Code Online (Sandbox Code Playgroud)

谢谢!

csa*_*ers 27

如果你想要的话,Trojanfoe有最好的解决方案,但是一旦你开始处理其他数据类型的默认值,你就必须为它们做同样的事情.

另一种解决方案是检查捆绑包是否包含密钥:

String myString = bundle.containsKey("key") ? bundle.getString("key") : "default";
Run Code Online (Sandbox Code Playgroud)

它不如功能那么好,但如果你愿意,你总是可以把它包起来.


tro*_*foe 13

你必须自己包装:

public String getBundleString(Bundle b, String key, String def)
{
    String value = b.getString(key);
    if (value == null)
        value = def;
    return value;
}
Run Code Online (Sandbox Code Playgroud)


184*_*615 9

注意:http://developer.android.com/reference/android/os/Bundle.html

public String getString (String key, String defaultValue)

自:API等级12

编辑此功能已移至BaseBundle:此处


Fel*_*lix 8

另一个解决方案是检查null:

String s = bundle.getString("key");
if (s == null) s = "default";
Run Code Online (Sandbox Code Playgroud)

这比csaunders'溶液更好,因为Bundle可以包含相应的键,但它可以是不同的类型(例如一个的int),在这种情况下,他的溶液将导致myString在被null代替"default".