在 Android 中解析 JSON 数据时响应转到 onFailure 方法

Response goes to onFailure method while Parsing JSON data in Android

我正在使用 Loopj 库解析我的 android 应用程序中的 json 数据,但每次响应都会进入 onFailure。

W/JsonHttpRH: onFailure(int, Header[], String, Throwable) was not overriden, but callback was received W/JsonHttpRH: org.apache.http.client.HttpResponseException: Method Not Allowed W/JsonHttpRH: at com.loopj.android.http.AsyncHttpResponseHandler.sendResponseMessage(AsyncHttpResponseHandler.java:466) W/JsonHttpRH: at com.loopj.android.http.AsyncHttpRequest.makeRequest(AsyncHttpRequest.java:160) W/JsonHttpRH: at com.loopj.android.http.AsyncHttpRequest.makeRequestWithRetries(AsyncHttpRequest.java:177) W/JsonHttpRH: at com.loopj.android.http.AsyncHttpRequest.run(AsyncHttpRequest.java:106) W/JsonHttpRH: at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:442) W/JsonHttpRH: at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) W/JsonHttpRH: at java.util.concurrent.FutureTask.run(FutureTask.java:137) W/JsonHttpRH: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) W/JsonHttpRH: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) W/JsonHttpRH: at java.lang.Thread.run(Thread.java:856) E/CT: E/CT: E/CT: E/CT: E/CT:
Service

我认为问题出在您的 URL 在 URL 末尾放置一个 '/' 会导致重定向发生,因为您的服务器喜欢 URL 以 '/' 结尾的。 POST 完全支持 URL 您的服务器将您重定向到,但是当客户端根据您的 setRedirecting() 调用执行 GET 请求时(cURL 完全相同-L 开关的问题)解决方法是在 URL 末尾放置一个“/”,或者自己从响应中获取位置 header,然后启动另一个 POST手动请求。

这可以在wireshark中观察到。您可以通过尝试使用浏览器向 URL 执行 GET 请求并附加一个斜杠来测试该理论。这将导致浏览器获得 405。这是 Android 的固定代码,此代码使用简单的修复将 '/' 附加到 URL(未准备好生产):

您忘记在清单中允许您的应用访问互联网。至于与我的代码回调不匹配的文档,版本可能不匹配,因为我的 android async 1.4.3 jar 源中的签名与我的覆盖一致。

首先检查 json 数据,即即将到来的数据是 json 数组格式或仅数组类型。使用此方法解析 json 数据

private void parseJSON() {

    try {
        JSONObject josn = new JSONObject(GetCar);

                    JSONArray array = json.getJSONArray("Company");

    } catch (JSONException e) {
        e.printStackTrace();
    }
}
Method Not Allowed 

您正在尝试使用服务器端不允许的方法 (POST, PUT) 进行 HTTP 调用。