从Android JSONException获取JSON字符串

时间:2015-12-07 22:09:18

标签: android-volley jsonobject jsonexception

我的Volley请求可以作为JSONArray(有效)或JSONObject(错误消息)返回,为了正确显示错误响应,我想将失败的JSONArray字符串解析为JSONObject。似乎JSONException对象包装原始文本。是否有可能只获取失败的文本以便以不同方式解析它?

示例:

org.json.JSONException: Value {"error":"User has not signed up to be a customer"} of type org.json.JSONObject cannot be converted to JSONArray

我想获得JSON字符串组件,因为它是一个有效的JSONObject。

2 个答案:

答案 0 :(得分:1)

因为您的响应是JSONArray(有效)或JSONObject(错误消息),所以您可以参考以下代码:

// Check the response if it is JSONObject or JSONArray
Object json = new JSONTokener(response).nextValue();
if (json instanceof JSONObject) {
    // do something...
} else if (json instanceof JSONArray) {
    // do something...
}

希望它有所帮助!

答案 1 :(得分:0)

我认为实际上不可能只从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并使用最终结果向最终用户显示正确的内容。