有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我使用的是Android附带的HttpComponents库。我编写了两个类,用GET和POST发送参数,并从服务器接收输入流或字符串。一切都很顺利:每个线程上的下载、开始、暂停、恢复。。。但今天我同时开始了两次下载,但都没有完成

我在谷歌上搜索了一个解决方案,我看到Android附带了HttpCore 4.0-beta2。是的,非常古老。它于2008年7月1日发布,自那以后Android就再也没有更新过它

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

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

谢谢

已解决
必须使用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) 个答案

  1. # 1 楼答案

    But today I've started two downloads simultaneously none of them finished.

    因为HttpClient在默认情况下不是线程安全的。你必须为那件事联系一个ThreadSafeClientConnManager。这在HttpClient文档中有介绍

    I've googled a solution and I've seen that Android comes with HttpCore 4.0-beta2. Yes, it's very old. It was released on 01 July 2008 and Android hasn't updated it since then... and it's BUGGED

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

    请注意,自“2008年7月1日”以来,有相当多的提交

    I've rewritten my classes but now using HttpURLConnection and I can download two files at the same time.

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

    how can I use these jars if the new (4.1) and the old (beta2, 4.0) packages are the same?

    你不能