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

3
我使用了Android自带的HttpComponents库。我编写了两个类来发送GET和POST参数,并从服务器接收InputStream或String。一切都很好:每个下载都在一个线程上,开始、暂停、恢复...但是今天我同时启动了两个下载,但它们都没有完成。

我搜索了解决方案,发现Android自带的HttpCore 4.0-beta2。是的,它非常老,发布于2008年7月1日,自那时以来Android就没有更新过它...

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

好吧,如果你考虑在Android上使用HttpComponents,这是一个警告。现在我的问题是,我想将新版本4.1导入到我的项目中。我已经将jar添加到构建路径中,但是如果新版(4.1)和旧版(beta2、4.0)包相同,我该如何使用这些jar呢?

谢谢。

已解决
您需要使用ThreadSafeClientConnManager创建DefaultHttpClient:
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个回答

3

但是今天我同时开始了两个下载,但都没有完成。

因为HttpClient默认情况下不是线程安全的。你需要连接一个ThreadSafeClientConnManager来解决这个问题。这在HttpClient文档中有介绍。

我谷歌了一下解决方案,发现Android自带HttpCore 4.0-beta2。是的,它非常老旧。它于2008年7月1日发布,自那以后Android就没有更新过它……而且还有BUG。

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

请注意,“2008年7月1日”以来提交了相当多的更改。

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

大多数程序员也可以使用HttpClient实现这一点。

如果新的(4.1)和旧的(beta2、4.0)包是相同的,我该如何使用这些jar?

你不能。

谢谢,但是你提供的示例是针对4.1版本的。解决方案已经在我的帖子中了。 - Gabriel Llamas

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