【问题标题】:How to use loopj-async-http android library on Intentservice?如何在 Intentservice 上使用 loopj-async-http android 库?
【发布时间】:2014-01-16 15:36:58
【问题描述】:

我正在尝试使用

提供的 SyncClient 创建连接

https://github.com/loopj/android-async-http

我无法连接到我的 Web 服务,它显示以下日志

12-05 19:54:45.397: W/System.err(3836): org.apache.http.client.ClientProtocolException
12-05 19:54:45.397: W/System.err(3836):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:557)
12-05 19:54:45.397: W/System.err(3836):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
12-05 19:54:45.397: W/System.err(3836):     at com.loopj.android.http.AsyncHttpRequest.makeRequest(AsyncHttpRequest.java:75)
12-05 19:54:45.397: W/System.err(3836):     at com.loopj.android.http.AsyncHttpRequest.makeRequestWithRetries(AsyncHttpRequest.java:94)
12-05 19:54:45.397: W/System.err(3836):     at com.loopj.android.http.AsyncHttpRequest.run(AsyncHttpRequest.java:56)
12-05 19:54:45.397: W/System.err(3836):     at com.loopj.android.http.SyncHttpClient.sendRequest(SyncHttpClient.java:66)
12-05 19:54:45.407: W/System.err(3836):     at com.loopj.android.http.AsyncHttpClient.get(AsyncHttpClient.java:340)
12-05 19:54:45.407: W/System.err(3836):     at com.loopj.android.http.AsyncHttpClient.get(AsyncHttpClient.java:329)
12-05 19:54:45.407: W/System.err(3836):     at net.connectedu.service.AlarmService.checkAppStatus(AlarmService.java:151)
12-05 19:54:45.407: W/System.err(3836):     at net.connectedu.service.AlarmService.doWakefulWork(AlarmService.java:146)
12-05 19:54:45.407: W/System.err(3836):     at com.commonsware.cwac.wakeful.WakefulIntentService.onHandleIntent(WakefulIntentService.java:108)
12-05 19:54:45.407: W/System.err(3836):     at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
12-05 19:54:45.418: W/System.err(3836):     at android.os.Handler.dispatchMessage(Handler.java:99)
12-05 19:54:45.418: W/System.err(3836):     at android.os.Looper.loop(Looper.java:137)
12-05 19:54:45.418: W/System.err(3836):     at android.os.HandlerThread.run(HandlerThread.java:60)
12-05 19:54:45.418: W/System.err(3836): Caused by: org.apache.http.client.CircularRedirectException: Circular redirect to 'https://localhost/api/get_logs/lalith/'
12-05 19:54:45.427: W/System.err(3836):     at org.apache.http.impl.client.DefaultRedirectHandler.getLocationURI(DefaultRedirectHandler.java:173)
12-05 19:54:45.427: W/System.err(3836):     at org.apache.http.impl.client.DefaultRequestDirector.handleResponse(DefaultRequestDirector.java:923)
12-05 19:54:45.437: W/System.err(3836):     at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:475)
12-05 19:54:45.437: W/System.err(3836):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
12-05 19:54:45.437: W/System.err(3836):     ... 14 more

这可能是什么原因? loopj 中的同步库工作正常吗?

【问题讨论】:

    标签: java android intentservice


    【解决方案1】:

    我刚刚发现了如何在 loopj-android http lib 中使用同步库:下面是示例。我能够在第一次触发警报时得到响应,但是在下次安排警报接收器时我会得到上面的代码。希望能找到一些答案:(

    String content = ConnectionManager.getSyncClient.get("http://www.google.com");
    

    下一次请求到来时,我得到了上面的异常。 :(

    我在库中发现了错误,它不允许循环重定向。我想,会有其他人有类似的问题。我发现这篇文章很有帮助,

    Avoid Circular Redirect using HttpClient 4.1.1

    【讨论】:

      【解决方案2】:

      在发送您请求的网址之前,检查您的请求是否未发送到代理。我发现一些移动服务提供商会对您的所有请求应用内容调整或内容变形,以确保请求的站点适用于移动视图,这意味着您的请求没有从代理正确重定向。您可以检查移动设备上的互联网设置,以确保您的连接没有通过代理重定向。

      这可以在无线和网络设置 -> 移动网络 -> 接入点名称 -> 下找到,然后是您选择的互联网项目

      由于您似乎使用的是 localhost,您也可以尝试绕过以下错误:

      AsyncHttpClient 客户端 = new AsyncHttpClient();
      client.getHttpClient().getParams().setParameter(ClientPNames.ALLOW_CIRCULAR_REDIRECTS, true);

      如果您收到需要解析的响应,并且您收到解析异常并假设您的解析代码是正确的,则很可能是因为您收到的是来自代理服务器的响应而不是请求的响应

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多