好吧,这可能是一个noob问题,但我无法找到任何帮助我的东西。我在ImageView上加载BitMap作为异步任务,在这个类中:
class MyNetworkTask extends AsyncTask<URL, Void, Bitmap> {
ImageView tIV;
public MyNetworkTask(ImageView iv){
tIV = iv;
}
@Override
protected Bitmap doInBackground(URL... urls) {
Bitmap networkBitmap = null;
URL networkUrl = urls[0]; //Load the first element
try {
networkBitmap = BitmapFactory.decodeStream(
networkUrl.openConnection().getInputStream());
} catch (IOException e) {
e.printStackTrace();
}
return networkBitmap;
}
@Override
protected void onPostExecute(Bitmap result) {
tIV.setImageBitmap(result);
}
这就是我如何从我的活动中调用它:
new MyNetworkTask(myImageView).execute(photo_url);
但这会是异步的,对吧?这意味着如果在我的Activity中我尝试使用BitMap,它将是 null 。
是否存在类似“何时?? ”的循环,等待这个BitMap,而不是做某事?
或者有没有办法处理来自该异步类的回调?
答案 0 :(得分:0)
如果您正在谈论存储位图以便以后可以访问它,那么您应该在AsyncTask之外创建一个public Bitmap bitmap;
,然后从AsyncTask中填充它。
class MyNetworkTask extends AsyncTask<URL, Void, Bitmap> {
ImageView tIV;
public MyNetworkTask(ImageView iv){
tIV = iv;
}
@Override
protected Bitmap doInBackground(URL... urls) {
Bitmap networkBitmap = null;
URL networkUrl = urls[0]; //Load the first element
try {
networkBitmap = BitmapFactory.decodeStream(
networkUrl.openConnection().getInputStream());
} catch (IOException e) {
e.printStackTrace();
}
return networkBitmap;
}
@Override
protected void onPostExecute(Bitmap result) {
if(result != null){
bitmap = result;
}
tIV.setImageBitmap(result);
}
答案 1 :(得分:0)
您可以使用模式观察器。查看此链接以了解实施http://www.tutorialspoint.com/design_pattern/observer_pattern.htm
答案 2 :(得分:-1)
“什么时候”是什么意思? 我想到了类似的东西:
do{
networkBitmap = BitmapFactory.decodeStream(
networkUrl.openConnection().getInputStream());
}while(networkBitmap==null)
同样适用于while循环:
while(networkBitmap==null){
networkBitmap = BitmapFactory.decodeStream(
networkUrl.openConnection().getInputStream());
}