GetImages getImages = new GetImages();
getImages.execute(keys);
private class GetImages extends AsyncTask(String, Void, Void){
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Void doInBackground(String... keys) {
for(String key : keys){
StorageReference referenceImage = FirebaseStorage.getInstance().getReference().child("images/"+key);
final long ONE_MB = 1024*1024;
referenceImage.getBytes(ONE_MB).addOnSuccessListener(new OnSuccessListener() {
@Override
public void onSuccess(byte[] bytes) {
Toast.makeText(getApplicationContext(),"Success to Load Bitmap ....",Toast.LENGTH_LONG).show();
Bitmap bm = BitmapFactory.decodeByteArray(bytes,0,bytes.length);
}
});
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
Toast.makeText(getApplicationContext(),"Completed All Tasks ............",Toast.LENGTH_LONG).show();
}
}
}
该代码的问题是AsyncTask
在完成onPostExecute()
之前执行doInBackGround()
。 Completed All Tasks ... (已完成所有任务...) Toast在成功加载位图 Toast前显示。我不明白是什么问题。
答案 0 :(得分:1)
Firebase方法referenceImage.getBytes
本身是异步的,不需要将其放在AsyncTask中。要在获取图像后显示Toast,可以执行以下操作:
referenceImage.getBytes(ONE_MB).addOnSuccessListener(new OnSuccessListener() {
@Override
public void onSuccess(byte[] bytes) {
Toast.makeText(getApplicationContext(),"Success to Load
Bitmap....",Toast.LENGTH_LONG).show();
Bitmap bm = BitmapFactory.decodeByteArray(bytes,0,bytes.length);
Toast.makeText(getApplicationContext(),"Completed All Tasks
............",Toast.LENGTH_LONG).show();
}
});
答案 1 :(得分:0)
GetImages getImages = new GetImages();
getImages.execute(key);
密钥必须在GetImages类中初始化
protected void onPostExecute(Void aVoid) {
Toast.makeText(getApplicationContext(),"Completed All Task .......",Toast.LENGTH_LONG).show();
}
方法在doinbackground完成之后运行,您需要返回标记或数据以用于标记完成方法。不要返回NULL