2011-02-08 14 views
10

Acabo de notar que, aunque la mayoría de los getters de Bundle tienen la posibilidad de incluir un valor predeterminado, en caso de que la clave no exista en esa instancia de paquete en particular, getString no tiene esa posibilidad, devolviendo nulo si ese es el caso.Valor predeterminado en Bundle.getString (clave de cadena)

Cualquier idea sobre por qué es eso y si hay alguna manera de solución fácil para eso (por fácil quiero decir no tener que verificar cada valor individual o extender la clase Bundle).

A modo de ejemplo, en este momento sólo tiene esto:

bundle.getString("ITEM_TITLE"); 

Aunque me gustaría hacer:

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

Gracias!

Respuesta

11

Tendrás que se envuelve a sí mismo:

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

eso era lo que pensaba. Pero la idea de extender Bundle todavía parece un poco desordenada. Supongo que me quedaré con la comprobación cada vez por el momento :) –

22

Trojanfoe tiene la mejor solución si eso es lo que quieren, aunque una vez llegue a tratar con valores predeterminados para otros tipos de datos que tendrá que hacer lo Lo mismo para todos.

Otra solución sería la de comprobar para ver si el paquete contiene la clave:

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

No es tan agradable como una función, pero siempre se podría envolverlo si querías.

+0

Esto no funcionará si la clave existe, pero es de un tipo diferente (verifique mi respuesta para una alternativa). Sin embargo, funcionará si está seguro de que la clave contendrá un 'String' o no existirá en absoluto, en cuyo caso es una solución más corta (1 línea frente a 2: P). – Felix

+0

Es cierto, pero estaba pensando que se suponía que era una cadena. Por lo tanto, no use este método si no sabe cuáles serán los datos tratados por la clave en este paquete :) – csaunders

7

Otra solución es comprobar para null:

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

Esto es mejor que la solución csaunders' porque el Bundle puede contener la clave respectiva, pero puede ser de un tipo diferente (por ejemplo un int), en en cuyo caso su solución resultaría myString en ser null, en lugar de "default".

Cuestiones relacionadas