我刚刚注意到,虽然来自Bundle
的大多数getter都有可能包含默认值,但如果该特定包实例中不存在该键,getString
会不具备这种可能性,如果是这种情况则返回null。
关于为什么会有这样的想法以及是否有某种方法可以轻松解决这个问题(简单来说,我的意思是不必检查每个单独的值或扩展Bundle
类)。
例如,现在你只有这个:
bundle.getString("ITEM_TITLE");
虽然我想这样做:
bundle.getString("ITEM_TITLE","Unknown Title");
谢谢!
答案 0 :(得分:26)
如果你想要的话,Trojanfoe有最好的解决方案,但是一旦你处理了其他数据类型的默认值,你就必须为它们做同样的事情。
另一种解决方案是检查捆绑包是否包含密钥:
String myString = bundle.containsKey("key") ? bundle.getString("key") : "default";
它不如功能那么好,但如果你愿意,你总是可以把它包起来。
答案 1 :(得分:12)
你必须自己包装:
public String getBundleString(Bundle b, String key, String def)
{
String value = b.getString(key);
if (value == null)
value = def;
return value;
}
答案 2 :(得分:8)
注意:http://developer.android.com/reference/android/os/Bundle.html
public String getString (String key, String defaultValue)
自:API Level 12
编辑此功能已移至BaseBundle:here
答案 3 :(得分:7)
另一种解决方案是检查null
:
String s = bundle.getString("key");
if (s == null) s = "default";
这比csaunders的解决方案更好,因为Bundle
可以包含相应的键,但它可以是不同的类型(例如int
),在这种情况下,他的解决方案将导致{{ 1}}成为myString
,而不是null
。