2012-10-29 7 views
15

I応答がサーバから戻ってくると私は文字列の値を期待していますので、私はこれを使用する場合、私は、それJSON.getStringは戻らないヌル

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

を解析するためにこれを書いてい私のサーバーからnull値を取得すると、関数はnullを返しません。代わりに"null"を返します。

私はthis bug reportを見ましたが、解決策はありません。

EDIT:

私はこれを解決するために、小さなハックを持っていますが、それは醜いだと私はよりよい解決策を探しています:あなたの状況のた​​めのハックは大丈夫に見える

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

。 –

+1

それは大丈夫ですが、それは醜いハックだと私はそれを嫌いです – thepoosh

+1

それはなぜ醜いかハックですか?あなたはちょうどよくそれをやっている –

答えて

16

もう1つの方法は、boolean isNull(String key)というメソッドを使用し、返されたブール値に基づいて、オプションで処理を進めることです。次のようなものがあります:

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

しかし、私はあなたの現在の実装とこれとの間に大きな違いはないと思います。

+2

+1は、null値をチェックする正しい方法を指摘します。しかし、それほど大きな違いはないと私は同意しません。 isNUllコールはより洗練されており、オブジェクトとキャストに頼る方が望ましいはずです。 – EinLama

+0

'response.has(" message) "'チェックを削除できませんか?そのキーが存在しないときはいつでも、 'isNull'は真を返すので、' getString'は呼び出されず、例外はスローされません。 –

0

また、私にはOKに見える可能性、

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

    return msg; 
}  
+0

笑、あなたのIDEやコンパイラはif文全体が役に立たないという事実について警告していませんか? 'msg'がnullの場合、' getMessageFromServer'メソッドの中で 'msg'自体を返してください。 –

関連する問題