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 を解析し、最終結果を使用して正しいものをエンド ユーザーに表示します。