如何在Android上使用最新的HttpComponents版本?

时间:2011-03-01 12:17:01

标签: java android http apache-httpcomponents

我使用的是Android附带的HttpComponents库。我写了两个类来发送带有GET和POST的参数,并从服务器接收一个InputStream或一个String。一切正常:每次线程下载,开始,暂停,恢复......但是今天我同时开始了两次下载,但都没有完成。

我已经搜索了一个解决方案,我发现Android附带了HttpCore 4.0-beta2。是的,它已经很老了。它于2008年7月1日发布,Android从那时起就没有更新......

我已经重写了我的课程,但现在使用HttpURLConnection,我可以同时下载两个文件。

好的,如果你正在考虑在Android上使用HttpComponents,这对你来说是一个警告。现在我的问题。我想将新版本4.1导入到我的项目中。我已将罐子添加到内置路径中,但是现在如果新(4.1)和旧(beta2,4.0)包装相同,我怎么能使用这些罐子呢?

谢谢。

解决
您必须使用ThreadSafeClientConnManager:

创建DefaultHttpCLinet
HttpParams parameters = new BasicHttpParams ();
HttpProtocolParams.setVersion (parameters, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset (parameters, HTTP.UTF_8);
HttpProtocolParams.setUseExpectContinue (parameters, false);
ConnManagerParams.setMaxTotalConnections (parameters, MAX_CONNECTIONS);

SchemeRegistry schReg = new SchemeRegistry ();
schReg.register (new Scheme ("http", PlainSocketFactory.getSocketFactory (), 80));

client = new DefaultHttpClient (new ThreadSafeClientConnManager (parameters, schReg), parameters);

更新:您还可以使用AndroidHttpClient。使用此课程,您不需要使用ThreadSafeClientConnManager

AndroidHttpClient client = AndroidHttpClient.newInstance ("Android");

More info

1 个答案:

答案 0 :(得分:3)

  

但今天我开始两次下载,但没有一次完成。

因为默认情况下HttpClient不是线程安全的。你必须为此ThreadSafeClientConnManager挂钩。这在HttpClient文档中有所介绍。

  

我搜索了一个解决方案,我发现Android附带了HttpCore 4.0-beta2。是的,它已经很老了。它于2008年7月1日发布,Android从那时起就没有更新......而且它是BUGGED

https://android.googlesource.com/platform/external/apache-http

请注意,自“2008年7月1日”以来,有很多提交。

  

我已经重写了我的类,但现在使用HttpURLConnection,我可以同时下载两个文件。

大多数程序员也可以使用HttpClient执行此操作。

  

如果新的(4.1)和旧的(beta2,4.0)软件包相同,我该如何使用这些罐子?

你做不到。