【问题标题】:Response goes to onFailure method while Parsing JSON data in Android在 Android 中解析 JSON 数据时响应转到 onFailure 方法
【发布时间】:2015-10-17 06:56:21
【问题描述】:

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

W/JsonHttpRH: onFailure(int, Header[], String, Throwable) 不是 被覆盖,但接收到 W/JsonHttpRH 回调: org.apache.http.client.HttpResponseException:不允许的方法 W/JsonHttpRH: 在 com.loopj.android.http.AsyncHttpResponseHandler.sendResponseMessage(AsyncHttpResponseHandler.java:466) W/JsonHttpRH: 在 com.loopj.android.http.AsyncHttpRequest.makeRequest(AsyncHttpRequest.java:160) W/JsonHttpRH: 在 com.loopj.android.http.AsyncHttpRequest.makeRequestWithRetries(AsyncHttpRequest.java:177) W/JsonHttpRH: 在 com.loopj.android.http.AsyncHttpRequest.run(AsyncHttpRequest.java:106) W/JsonHttpRH: 在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:442) W/JsonHttpRH: 在 java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) W/JsonHttpRH: 在 java.util.concurrent.FutureTask.run(FutureTask.java:137) W/JsonHttpRH: 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) W/JsonHttpRH: 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) W/JsonHttpRH: 在 java.lang.Thread.run(Thread.java:856) E/CT: E/CT: E/CT: E/CT: E/CT:
服务

【问题讨论】:

    标签: android json parsing loopj


    【解决方案1】:
    Method Not Allowed 
    

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

    【讨论】:

    • 对不起,我没有正确理解你..你能解释一下吗?其实我是安卓新手
    • 非常感谢 Orest.. 我明白了。我真的犯了一个愚蠢的错误。我也在 fb 上向你发送了好友请求。
    • 不是Android特性,是简单的http通信原理。但也许还有其他一些问题,但是记录器说你做错了http方法。如果是正确答案,您可以随时将其标记为正确:)
    【解决方案2】:

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

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

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

    【讨论】:

    • 我在第一个响应中点击两个不同的链接进入成功,我在应用程序中获取数据,但在第二个响应中进入 onFailure
    【解决方案3】:

    首先检查 json 数据,即传入的数据是 jsonArray 格式或只有数组类型。使用此方法解析json数据

    private void parseJSON() {
    
        try {
            JSONObject josn = new JSONObject(GetCar);
    
                        JSONArray array = json.getJSONArray("Company");
    
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
    

    【讨论】:

    • 我收到 json 格式的响应,但不知道解析时发生了什么
    • { "GetCar": { "Company": "Ashok-Leyland", "Id": "111", "Model": "Stile", "PriceBangalore": null, "PriceChennai": null, "PriceDelhi": null, "PriceKolkata": null, "PriceMumbai": null, "Version": "LE- 8 Seater" } }
    • 你发了哪个?
    猜你喜欢
    • 2020-09-05
    • 1970-01-01
    • 2016-04-23
    • 1970-01-01
    • 1970-01-01
    • 2020-09-06
    • 1970-01-01
    • 2017-08-21
    相关资源
    最近更新 更多