Ответ 1
Вам придется обернуть его самостоятельно:
public String getBundleString(Bundle b, String key, String def)
{
String value = b.getString(key);
if (value == null)
value = def;
return value;
}
Я только заметил, что, хотя большинство получателей из Bundle
имеют возможность включать значение по умолчанию, если ключ не существует в этом конкретном экземпляре пакета, getString
не имеет такой возможности, возвращая null в этом случае.
Любые идеи о том, почему это так, и если есть какое-то простое решение для этого (я просто не хочу проверять каждое отдельное значение или расширять класс Bundle
).
В качестве примера, прямо сейчас у вас есть только это:
bundle.getString("ITEM_TITLE");
Пока я хотел бы сделать:
bundle.getString("ITEM_TITLE","Unknown Title");
Спасибо!
Вам придется обернуть его самостоятельно:
public String getBundleString(Bundle b, String key, String def)
{
String value = b.getString(key);
if (value == null)
value = def;
return value;
}
Trojanfoe имеет лучшее решение, если это то, что вы хотите, но как только вы столкнетесь с дефолтами для других типов данных, вам придется сделать то же самое для всех.
Другим решением было бы проверить, содержит ли пучок ключ:
String myString = bundle.containsKey("key") ? bundle.getString("key") : "default";
Это не так хорошо, как функция, но вы всегда можете ее обернуть, если хотите.
Другое решение - проверить null
:
String s = bundle.getString("key");
if (s == null) s = "default";
Это лучше, чем решение csaunders, потому что Bundle
может содержать соответствующий ключ, но может быть другого типа (например, int
), и в этом случае его решение приведет к тому, что myString
будет null
вместо "default"
.
Примечание: http://developer.android.com/reference/android/os/Bundle.html
public String getString (String key, String defaultValue)
Начиная с: API уровня 12
ИЗМЕНИТЬ, что эта функция переместилась в BaseBundle: здесь