1

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

有効な JSONObject であるため、JSON 文字列コンポーネントだけを取得したいと考えています。

4

2 に答える 2

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...
}

それが役に立てば幸い!

于 2015-12-08T02:13:59.797 に答える
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 を解析し、最終結果を使用して正しいものをエンド ユーザーに表示します。

于 2015-12-08T14:22:01.663 に答える