安卓HttpResponse被调用第二次时总是失效

6

我有一个奇怪的故障,就是我不能重复执行相同的网络调用。

    HttpClient client = new DefaultHttpClient();
    HttpPost post = new HttpPost(url);

    try {
         HttpResponse response = client.execute(post, new BasicHttpContext());

第一次运行网络调用时,它可以正常工作并返回数据。第二次运行网络调用(我已经通过此处运行了断点),它到达HttpResponse对象,运行网络调用,但立即跳转到IOException catch。
每次post对象具有相同的数据,所有cookie都已包含在内。
我周围没有熟悉服务器(运行drupal)的人,但似乎是服务器问题。
有人能解释为什么会发生这种情况吗?为什么我第二次被禁止获取数据?
为了进一步阐明问题,如果我通过响应对象打破,我可以看到它可能返回""而不是数据。 如果有帮助的话
05-15 11:22:34.612: E/(1094): ObjectService
05-15 11:22:34.612: E/(1094): org.apache.http.client.ClientProtocolException
05-15 11:22:34.612: E/(1094):   at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:557)
05-15 11:22:34.612: E/(1094):   at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
05-15 11:22:34.612: E/(1094):   at com.fivepoints.service.ObjectService.getObject(ObjectService.java:121)
 05-15 11:22:34.612: E/(1094):  at com.fivepoints.model.team.TeamView$ActivityListTask.doInBackground(TeamView.java:94)
 05-15 11:22:34.612: E/(1094):  at com.fivepoints.model.team.TeamView$ActivityListTask.doInBackground(TeamView.java:1)
05-15 11:22:34.612: E/(1094):   at android.os.AsyncTask$2.call(AsyncTask.java:185)
05-15 11:22:34.612: E/(1094):   at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
05-15 11:22:34.612: E/(1094):   at java.util.concurrent.FutureTask.run(FutureTask.java:138)
05-15 11:22:34.612: E/(1094):   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
05-15 11:22:34.612: E/(1094):   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
05-15 11:22:34.612: E/(1094):   at java.lang.Thread.run(Thread.java:1019)
05-15 11:22:34.612: E/(1094): Caused by: org.apache.http.client.CircularRedirectException: Circular redirect to 'http://mysite.com/demoObject/_c'
05-15 11:22:34.612: E/(1094):   at org.apache.http.impl.client.DefaultRedirectHandler.getLocationURI(DefaultRedirectHandler.java:173)
05-15 11:22:34.612: E/(1094):   at org.apache.http.impl.client.DefaultRequestDirector.handleResponse(DefaultRequestDirector.java:903)
05-15 11:22:34.612: E/(1094):   at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:468)
05-15 11:22:34.612: E/(1094):   at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
05-15 11:22:34.612: E/(1094):   ... 10 more

它会抛出什么异常? - techi.services
我知道,但IOException包含了所有的IO异常。LogCat说了什么? - techi.services
嗯,我目前没有使用 Log.e 输出任何内容。} catch (IOException e) { Log.e("myService", e.getMessage()); 报告了一个空异常。 - CQM
请完整地发布实际的异常信息。堆栈跟踪将告诉您导致崩溃的确切代码行。在Eclipse中打开您的logcat视图,并复制通常为红色的50-100行堆栈跟踪。告诉我们您有一个IOException而没有发布整个异常信息是无用的。 - Jack
@jack,这是因为它没有告诉我任何信息,只是告诉我在asynctask中出现了错误,然后告诉我由于没有从http响应中获取任何数据而导致空指针异常。我正在添加一些内容到我的catch语句中以获取更多信息。 - CQM
显示剩余6条评论
1个回答

0

起初,我记录错误的方式也导致了崩溃,所以我不知道确切的错误是什么。

真正的异常是Caused by: org.apache.http.client.CircularRedirectException,因为服务器处理API调用的方式。

这是来自的答案:

https://dev59.com/IGw15IYBdhLWcg3wT59c#6699772

HttpClient client = new DefaultHttpClient();client.getParams().setParameter(ClientPNames.ALLOW_CIRCULAR_REDIRECTS, true);

HttpClient client = new DefaultHttpClient();client.getParams().setParameter(ClientPNames.ALLOW_CIRCULAR_REDIRECTS, true);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接