如何在Intentservice上使用loopj-async-http android库?

时间:2012-12-05 14:29:55

标签: java android intentservice

我正在尝试使用随

提供的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中的同步库工作正常吗?

2 个答案:

答案 0 :(得分:0)

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

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

下次请求到来时,我得到上面的例外。 :(

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

Avoid Circular Redirect using HttpClient 4.1.1

答案 1 :(得分:0)

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

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

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

AsyncHttpClient client = new AsyncHttpClient();
client.getHttpClient()。getParams()。setParameter(ClientPNames.ALLOW_CIRCULAR_REDIRECTS,true);

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