2011-02-08 12 views
10

Właśnie zauważyłem, że podczas gdy większość pobierających z Bundle ma możliwość włączenia wartości domyślnej, na wypadek, gdyby klucz nie istniał w danej instancji pakunku, getString nie ma takiej możliwości, zwracając wartość null, jeśli tak jest.Wartość domyślna na Bundle.getString (klucz String)

Wszelkie pomysły na to, dlaczego tak jest i czy jest jakiś sposób na łatwe rozwiązanie tego problemu (przez proste rozumiem, że nie muszę sprawdzać poszczególnych wartości ani rozszerzać klasy Bundle).

Jako przykład, teraz trzeba tylko to:

bundle.getString("ITEM_TITLE"); 

Chociaż chciałbym zrobić:

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

Dzięki!

Odpowiedz

11

Musisz go owinąć sobie pytanie:

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

To właśnie myślałem. Ale pomysł rozszerzenia Bundle nadal wydaje się nieco brudny. Sądzę, że będę trzymać się sprawdzania za każdym razem na chwilę :) –

22

Trojanfoe ma najlepsze rozwiązanie, jeśli to, co chcesz, choć raz dostać się do czynienia z domyślnych dla innych typów danych będziesz musiał wykonać to samo dla nich wszystkich.

Innym rozwiązaniem byłoby, aby sprawdzić, czy pakiet zawiera klucz:

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

To nie jest tak ładny jak w funkcji, ale zawsze można owinąć go, jeśli chciał.

+0

To nie zadziała, jeśli klucz istnieje, ale jest innego typu (sprawdź moją odpowiedź na alternatywę). Będzie jednak działać, jeśli jesteś pewien, że klucz będzie zawierał "String" lub w ogóle nie istnieje, w takim przypadku jest to rozwiązanie krótsze (1 linia vs 2: P). – Felix

+0

To prawda, ale myślałem tylko, że założono, że jest ciągiem. Tak więc, nie używaj tej metody, jeśli nie wiesz, jakie dane będą adresowane przez klucz w tym pakiecie :) – csaunders

7

Innym rozwiązaniem jest sprawdzenie null:

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

To jest lepsze niż rozwiązania csaunders' ponieważ Bundle może zawierać odpowiedni klawisz, ale to może być innego typu (na przykład int), w w takim przypadku jego rozwiązanie spowodowałoby, że myString jest null, zamiast "default".