2011-03-01 72 views
3

我使用Android自带的HttpComponents库。我写了2个类,用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:如何在Android上使用最新的HttpComponents版本?

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); 

UPDATE:您还可以使用AndroidHttpClient。有了这个类,你不需要使用ThreadSafeClientConnManager

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

More info

回答

3

但今天我已经同时启动两个下载他们没有完成。

因为默认情况下HttpClient不是线程安全的。你必须为此连接ThreadSafeClientConnManager。这包括在HttpClient文档中。

我用Google搜索了一个解决方案,我看到Android自带了HttpCore 4.0-beta2。是的,这是非常古老的。它发布于2008年07月01日和Android此后一直没有更新了它,而且它的窃听

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

请注意,有自“2008年07月01日”相当多的提交。

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

大多数程序员也可以用HttpClient来做到这一点。

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

你不行。

+0

谢谢,但你提供的例子是4.1版本。解决方案在我的帖子中。 – 2011-03-01 13:28:53

相关问题