【问题标题】:The loopj android-async-http request sometimes didn't response at allloopj android-async-http 请求有时根本没有响应
【发布时间】:2014-03-26 05:17:13
【问题描述】:

我正在使用这个库来请求我的网络服务。它有时在 onSuccess 和 onFailure 中根本没有响应(这是我覆盖的仅有的两种方法)。我在1.4.4和1.4.5下测试过(android-async-http-1.4.5-20131110.125018-1,这个比较好,但是有时候还是会遇到这个问题)。我确定这不是网络问题,因为我的 ios 应用程序从未在同一个 Web 服务中遇到过这个问题。并且在出现此问题后立即刷新时可以得到响应。

这是我的代码:

在requester.java中

public class Requester 
{

    public static void get(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {

    AsyncHttpClient client = newClient();
    client.get(getAbsoluteUrl(url), params, responseHandler);
}

public static void post(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {

    AsyncHttpClient client = newClient();
    client.post(getAbsoluteUrl(url), params, responseHandler);
}

private static String getAbsoluteUrl(String relativeUrl) {
    return Settings.BASE_URL + relativeUrl;
}

private static AsyncHttpClient newClient()
{
    AsyncHttpClient client = new AsyncHttpClient();
    client.setMaxRetriesAndTimeout(Settings.HTTP_TIMEOUT,Settings.HTTP_RETRIES);
    return client;
}
}

在我发出 http 请求的活动中:

    Requester.get(urlRequest, null, new JsonHttpResponseHandler()
    {
        @Override
        public void onSuccess(int statusCode, org.apache.http.Header[] headers, org.json.JSONArray objects)
        {
            Logger.logDebug(TAG, "request success for " + " " + objects.length() + " objects");
        }

        @Override
        public void onFailure(int statusCode, org.apache.http.Header[] headers, java.lang.Throwable throwable, org.json.JSONArray errorResponse)
        {
            Logger.logError(TAG,"Failed to request");
        }

    });

我在几个项目中使用了类似的来源。但所有人都有同样的问题。我不知道这是我的代码或 android-async-http 库的问题。有人可以帮忙吗?谢谢。

顺便说一句,我通常使用与上述源代码相同的方法,但使用不同的 url 同时发出 3 个请求。

【问题讨论】:

    标签: android http-request loopj android-async-http


    【解决方案1】:

    我确认问题与多个请求有关。我的解决方案是用另一个库替换:Volley 库。问题解决了!

    【讨论】:

    • 拜托,你的效果如何?它比 async-http 更好吗?
    【解决方案2】:

    我也遇到了这个问题,经过进一步调查,我意识到如果收到的 json 响应不是正确的 json 格式,或者如果来自服务器的响应包含任何额外的字符,您将不会调用回调方法,尽管post 或 get 将被处理,回调将不会被触发。检查服务器的响应以确保。

    【讨论】:

    • 感谢您的回复。但这可能不是我的问题。因为我从服务器获得的一些 json 数据总是相同的。但问题是间歇性的。如果遇到无响应问题,我几乎可以通过再次发送相同的请求来 100% 取回数据。
    • 顺便问一下,回调前哪里可以获取原始数据?这样我就可以监控它了。
    • 就是这样,一旦您使用 JsonResponseHandler,如果返回的不是“完美”的 json 数据,您将不会收到回调,但是如果您使用 AsyncHttpResponse 回调,我认为有一个选项成功为您提供字符串输出,您可以在其中查看返回的内容。
    • 好的,我会试试 AsyncHttpResponse。但我认为可能与同时多个请求有关。因为刚才在测试的时候只有一个请求就好了。 (我请求超过 100 次,完全没有问题。)有多个请求的最佳方法是什么?
    • 嗯,多个请求到底是什么意思?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    • 2018-04-03
    相关资源
    最近更新 更多