adr*_*ian 0 android android-asynctask
我在android中有一个应用程序从http页面检索图片.我正在使用AsyncTask线程请求这张图片.
我是这样做的:
mPostButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
for(int i=0;i<friends.size();i++)
{
getUserPic(friends.get(i).getId());
}
}
});
Run Code Online (Sandbox Code Playgroud)
我有一个ArrayList调用friends和列表中的每个项目我正在调用方法:getUserPic()执行一个AyncTask线程:
public void getUserPic(String userID){
final String imageURL;
Bitmap bitmap=null;
imageURL = "http://graph.facebook.com/"+userID+"/picture?type=small";
task.execute(new String[] {imageURL});
}
Run Code Online (Sandbox Code Playgroud)
所以每次调用都会getUserPic()使用AsyncTask线程来调用imageURL.
问题是我得到FC ....这里是我的logcat的样子:
java.lang.IllegalStateException: Cannot execute task: the task is already running.
at android.os.AsyncTask.execute(AsyncTask.java:380)
at com.facebook.android.Example.getUserPic(Example.java:129)
at com.facebook.android.Example$3.onClick(Example.java:114)
at android.view.View.performClick(View.java:2364)
at android.view.View.onTouchEvent(View.java:4179)
at android.widget.TextView.onTouchEvent(TextView.java:6540)
at android.view.View.dispatchTouchEvent(View.java:3709)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
Run Code Online (Sandbox Code Playgroud)
任何人,对此有任何解决方案吗?谢谢你!
您task为循环的每次迭代使用相同的对象(这就是错误说"任务已在运行"的原因).您可以通过为每次迭代创建一个新的任务对象来解决此问题,例如
MyTask task = new MyTask();
task.execute(new String[] {imageURL});
Run Code Online (Sandbox Code Playgroud)
但是,如果您最终开始执行大量任务,那么这样做可能会非常糟糕.所以你最好有一个任务并给它一个要下载的图像列表.例如
ids = new ArrayList<String>();
for(int i=0;i<friends.size();i++)
{
ids.add(friends.get(i).getId());
}
getUserPics(ids);
Run Code Online (Sandbox Code Playgroud)
然后,您的getUserPic方法会将所有ID传递给单个任务实例.
public void getUserPics(List<String> userIDs){
final String imageURL;
Bitmap bitmap=null;
String[] imageURLs = new String[userIDs.legnth()];
for(int i = 0; i < userIDs.length(); i++) {
imageURLs[i] ="http://graph.facebook.com/"+userIDs[i]+"/picture?type=small";
}
task.execute(imageURLs);
}
Run Code Online (Sandbox Code Playgroud)
这样做,您可能希望使用publishProgresson AsyncTask来更新您到目前为止已经下载的图像的UI,而不是等到最后才拥有它们.
| 归档时间: |
|
| 查看次数: |
5016 次 |
| 最近记录: |