2012-10-29 18 views
15

mam odpowiedź wraca z serwera i spodziewam wartość String, więc napisałem to dla analizowania goJSON.getString nie zwróci null

public String getMessageFromServer(JSONObject response) { 
    String msg = response.getString("message"); 
    return msg; 
} 

wtedy, gdy używam w moim kod i uzyskać z serwera wartość null, funkcja nie zwraca wartości null, zamiast tego zwraca "null".

Widziałem this bug report, ale nie widzę rozwiązania.

EDIT:

Mam mały siekać, aby rozwiązać ten ale to brzydki i szukam lepszego rozwiązania:

public String getMessageFromServer(JSONObject response) { 
    Object msg = response.get("message"); 
    if(msg == null) { 
     return null; 
    } 
    return (String) msg; 
}  
+1

To wygląda OK, aby mnie. –

+1

jest ok, ale to brzydki hack i nie podoba mi się to – thepoosh

+1

Dlaczego ten brzydki lub hack? Po prostu robisz to dobrze –

Odpowiedz

16

Hack wygląda dobrze w danej sytuacji.

Inną opcją byłoby użycie metody boolean isNull(String key), a następnie na podstawie zwróconej wartości boolowskiej kontynuuj z opcją. Coś jak:

public String getMessageFromServer(JSONObject response) { 
    return ((response.has("message") && !response.isNull("message"))) ? response.getString("message") : null; 
} 

Ale wtedy, nie sądzę, nie ma wielkiej różnicy między aktualnym wdrożenia i to.

+2

+1 za wskazanie prawidłowej metody sprawdzania wartości pustej. Ale nie zgadzam się, kiedy mówisz, że nie ma dużej różnicy. Wywołanie isNUll jest czystsze i powinno być preferowane w stosunku do polegania na Object i castingu. – EinLama

+0

Nie możesz usunąć "response.has (" wiadomość ")" sprawdź? Gdy ten klucz nie istnieje, 'isNull' zwróci wartość true, więc' getString' nie zostanie wywołany i nie zostanie zgłoszony żaden wyjątek. –

0

również możliwość,

public String getMessageFromServer(JSONObject response) { 
    String msg = response.getString("message", null); 
    if(msg == null) { 
     return null; 
    } 

    return msg; 
}  
+0

Lol, czy twój IDE ani kompilator nie ostrzegł cię o tym, że całe oświadczenie if jest bezużyteczne? Jeśli 'msg' ma wartość null, po prostu zwróć' msg' wewnątrz metody 'getMessageFromServer'. –

Powiązane problemy