2012-10-29 13 views
15

ho una risposta di ritorno da un server e mi aspetto un valore String, così ho scritto questo per analizzarloJSON.getString non restituisce nulla

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

poi, quando uso questo nel mio codice e ottenere un valore null dal server, la funzione non restituisce null, restituisce invece "null".

Ho visto this bug report, ma non vedo una soluzione.

EDIT:

ho un piccolo hack per risolvere questo ma è brutto e sto cercando una soluzione migliore:

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

che sembra OK per me. –

+1

è ok, ma è un brutto trucco e non mi piace – thepoosh

+1

Perché è brutto o hack? Lo stai facendo bene –

risposta

16

L'hack sembra a posto per la situazione.

L'altra opzione sarebbe quella di utilizzare il metodo boolean isNull(String key) e in base al valore booleano restituito procedere con l'opzione. Qualcosa di simile:

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

Ma poi, non penso che ci sia molta differenza tra la vostra attuale implementazione e questo.

+2

+1 per indicare il metodo corretto per verificare un valore nullo. Ma non sono d'accordo quando dici che non c'è molta differenza. La chiamata isNUll è più pulita e dovrebbe essere preferita per fare affidamento su Object e sul casting. – EinLama

+0

non puoi rimuovere il comando 'response.has (" message) "'? Ogni volta che quella chiave non esiste, 'isNull' restituirà true, quindi' getString' non verrà chiamato e non verrà lanciata alcuna eccezione. –

0

anche una possibilità,

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

    return msg; 
}  
+0

Lol, il tuo IDE o compilatore non ti ha avvisato del fatto che l'intera dichiarazione if è inutile? Se 'msg' è null, restituisci' msg' stesso all'interno del metodo 'getMessageFromServer'. –

Problemi correlati