帮助管理AsynTask线程

时间:2011-07-18 18:03:06

标签: android android-asynctask

我在Android中有一个应用程序,我正在尝试使用AsyncTask线程从互联网上检索一些图片。 问题是我正在loop中检索这些图片,因此对于每个索引我都会启动一个新的AsyncTask线程。每个线程返回一张图片(imageView)。

这是我的问题:

启动的线程异步返回图片,所以当我尝试访问存储这些图像的List时,我得到ArrayIndexOutofBounds

这是我的代码:

for(int i=0;i<friends.size();i++)
                    {
            getUserPic(friends.get(i).getId());
                    }

这是getUserPic方法:

  public void getUserPic(String userID){

        imageURL = "http://graph.facebook.com/"+userID+"/picture?type=small";
    new Task().execute(new String[] {imageURL});

    }

以下是主题:

 private class Task extends AsyncTask<String, Void, Bitmap>{

        @Override
        public Bitmap doInBackground(String...arg0){


            DefaultHttpClient client = new DefaultHttpClient();
            HttpGet httpGet = new HttpGet(arg0[0]);
            try{
                HttpResponse execute = client.execute(httpGet);
                InputStream content = execute.getEntity().getContent();

        profilePicBitmap=BitmapFactory.decodeStream(content);


            }
           catch (MalformedURLException e) {
              e.printStackTrace();
          } catch (IOException e) {
              e.printStackTrace();
          }
          return profilePicBitmap;

        }
        @Override
           public void onPostExecute(Bitmap result) {
                imageView.setImageBitmap(result);
                arrayImageView.add(imageView);
            }
}

所以我想做的是:

  List<ImageView> arrayImageView=new ArrayList<ImageView>();



    for(i....)

    {
 arrayImageView[i]=getUserPic(...);
     }

 public ImageView getUserPic(String userID){

            imageURL = "http://graph.facebook.com/"+userID+"/picture?type=small";
        new Task().execute(new String[] {imageURL});
return ImageView;

        }

我的意思是每个ImageView返回的AsyncTask线程也会被getUserPic方法返回。所以我更容易跟踪它们。

问题:如何继续,以便AsynTask返回的图片也是getUserPic()返回的变量。

我希望你明白我的意思.Thx

1 个答案:

答案 0 :(得分:1)

如果我是对的你可以这样做..

 for(i....)

    {
 arrayImageView[i]=getUserPic(...);
     }

 public ImageView getUserPic(String userID){

            imageURL = "http://graph.facebook.com/"+userID+"/picture?type=small";
        new Task().execute(new String[] {imageURL});
progressDialog = ProgressDialog.show(context, "", "Please Wait....");//**progressDialog** an instance variable

return ImageView;

        }

并在postExecute中关闭此对话框..我建议这样做,因为此时UI线程将被阻止,您可以确保imageView初始化为postExecute()中的某个值,并且可以返回当对话框被解除并且UI线程恢复时..