正如标题所说,我对loopj的AsyncHttpClient有一个奇怪的问题。
MyObject是一个包含链接和值的类,lista是包含50个MyObject对象的List。
我需要从50个链接中检索标题信息,所以我做了一个这样的循环:
private static AsyncHttpClient client;
public MyClass(){
client = new AsyncHttpClient();
client.setURLEncodingEnabled(true);
}
....
public void foo(List<MyObject> lista){
for (final MyObject c : lista) {
client.head(c.getLink(), new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, org.apache.http.Header[] headers, byte[] responseBody) {
Log.d("DBG", "retrieving informations");
int contentlength = Integer.parseInt(headers[3].getValue());
c.setValue(contentLength);
Log.d("DBG", "retrivied");
setView(lista);
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
Log.d("DBG", "retrieving informations failed");
Log.d("DBG", error.toString());
}
});
}
}
在这一点上,如果我尝试执行该应用程序并查看CatLog,我可以看到50个请求中只有20或30个被执行,而其他请求没有给出任何反馈(即没有超时异常,没有"检索信息"调试消息,也没有任何其他类型的消息)。
如果我再次尝试执行该应用程序,大约会执行7或8个请求。
如果我试图更改代码中的任何内容(例如添加注释)并再次运行它,它甚至无法在模拟器上安装,并出现以下错误:
[2014-03-05 02:46:28 - Myapp] Failed to install MyApp.apk on device 'emulator-5554!
[2014-03-05 02:46:28 - MyApp] (null)
[2014-03-05 02:46:28 - MyApp] Launch canceled!
已经说过,删除前面提到的一段代码,其他一切都很好,我希望有人能帮助我解决它
任何帮助都会被感激。真的很感谢你提前!
我也面临同样的问题。看来您使用的是loopj的1.4.4版本。在github的1.4.4版本中,他们将此作为已知问题。要解决此问题,您必须从以下位置获取最新master的pull:https://github.com/loopj/android-async-http.提取最新的代码后,对其进行编译并生成jar文件。然后使用这个jar,而不是v1.4.4 jar。不幸的是,到目前为止,他们还没有部署带有此修复程序的最新jar。
经过大量研究,我发现了这个问题。您可以在以下网址上查看:https://github.com/loopj/android-async-http/issues/455
https://github.com/loopj/android-async-http/issues/453
https://github.com/loopj/android-async-http/issues/397
https://github.com/loopj/android-async-http/issues/398
https://github.com/loopj/android-async-http/pull/425
https://github.com/loopj/android-async-http/commit/5ee354db6706562849710b6fcd9b8ec91a3916fd
希望这对你有帮助。如果这能回答你的问题或解决你的问题,请+1这个:)