我在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
答案 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线程恢复时..