我使用的是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:
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");
答案 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)软件包相同,我该如何使用这些罐子?
你做不到。