【发布时间】:2015-09-27 01:29:19
【问题描述】:
我有一个返回 2 组不同值的响应。在每种情况下,一个值将始终为空,而另一个值将始终包含一个值。问题是 Volley 不允许我分配空 JSON 值或在 if 语句中检查 JSON 值。它只是指 catch 块。我正在尝试做类似的事情:
StringRequest request = new StringRequest(Request.Method.POST, "url", new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject obj = new JSONObject(response);
//If this is null, it stops here and goes to catch.
String value1 = obj.getString("value1")
String value2 = obj.getString("value2");
//Can't perform any more code because Value1 is null
} catch (JSONException e) {
Log.d("Log","Your String was null");
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("Log", "Unable to connect to server!");
}
});
由于库的设计方式,我无法使用 throws,它迫使我将其放入 try/catch 中。无论如何,这周围有吗?
编辑:以下异常是我得到的:
org.json.JSONException: value1 没有值
【问题讨论】:
-
为什么不直接测试
response的值? -
response不是空的部分。问题在于将我的任何get值(在本例中为getString)放入变量中仍会导致catch 块执行。因此,禁止我将其放入 if/else 中。 -
我很想听听什么值得反对。很简单的问题。
-
好的,所以您是说
response不为空,但是有一个异常导致以下日志"Your String was null",但是您不会查看实际的异常来确定这一点出去? -
您的异常是
No value for value1,这意味着它发生在get("value1")行。get的文档说Returns the value mapped by name, or throws if no such mapping exists.很好。现在,如果您花时间进一步了解,您会发现has方法,即Returns true if this object has a mapping for name.。所以,你绝对可以测试if (obj.has("value1")) { ... }。确实不难。
标签: android json android-volley