サーバーから応答が返ってきて、文字列値を期待しているので、これを解析用に作成しました
_public String getMessageFromServer(JSONObject response) {
String msg = response.getString("message");
return msg;
}
_
次に、これをコードで使用してサーバーからnull
値を取得すると、関数はnull
を返さず、代わりに_"null"
_を返します。
このバグレポート を見たことがありますが、解決策が見つかりません。
編集:
私はこれを解決するための小さなハックを持っていますが、それは醜いです、そして私はより良い解決策を探しています:
_public String getMessageFromServer(JSONObject response) {
Object msg = response.get("message");
if(msg == null) {
return null;
}
return (String) msg;
}
_
編集#2:
数年後、この質問に戻ると、私はここで完全に間違っていたわけではなく、JSONObject
にはこのためのメソッドが組み込まれていることがわかります。
JSONObject
からオプションの値を取得する方法は、 このメソッドJSONObject.optString("message", DEF_VALUE);
を使用することです。
ハックはあなたの状況に問題がないように見えます。
もう1つのオプションは、メソッドboolean isNull(String key)
を使用し、返されたブール値に基づいてオプションを続行することです。何かのようなもの:
public String getMessageFromServer(JSONObject response) {
return ((response.has("message") && !response.isNull("message"))) ? response.getString("message") : null;
}
しかし、それでは、現在の実装とこれとの間に大きな違いはないと思います。
Kotlinクラス拡張を使用すると、これは簡単に解決できます。
fun JSONObject.optNullableString(name: String, fallback: String? = null) : String? {
return if (this.has(name) && !this.isNull(name)) {
this.getString(name)
} else {
fallback
}
}
次に、例えばname
は次の場合はnullになります:
val name : String? = JSONObject("""{"id": "foo", "name":null}""").optNullableString("name")