我认为实际上不可能从 JSONException 中只检索 JSON 字符串,所以最后我从 BNK 那里得到了答案,并在这种情况下做了可能是最简单的解决方案。
诀窍似乎是接收 StringRequest 并在您知道有有效的字符串响应后进行 JSON 处理。这是我的项目中的样子。
StringRequest request = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
activity.hideProgress();
try {
Object json = new JSONTokener(response).nextValue();
if (json instanceof JSONArray) {
// an array is a valid result
dataModel.loadData((JSONArray)json);
} else if (json instanceof JSONObject) {
// this is an error
showErrorMessageIfFound((JSONObject)json);
}
} catch (JSONException error) {
error.printStackTrace();
}
refreshTable();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
activity.hideProgress();
showVolleyError(error);
// check for a JSONObject parse error
}
});
首先有一个 StringRequest 来检索响应。错误响应使用我的自定义错误处理器显示错误。成功响应解析 JSON 并使用最终结果向最终用户显示正确的内容。