我正在从Firebase数据库添加和检索图像。上载图像后,该图像将显示在recyclerview的另一个活动中。
当添加多个图像时,活动会一直在循环中打开,即取决于添加的图像数量。
我想在成功添加所有图像后立即打开所有活动。
我试图做一个逻辑,其中一个int a与mClipData.getItemCount()
进行比较,但是它没有给出任何解决方案
请帮助我解决这个问题
P.S:给出的代码适用于多张图片
if (data.getClipData() != null) {
ClipData mClipData = data.getClipData();
ArrayList<Uri> mArrayUri = new ArrayList<>();
for (int i = 0; i < mClipData.getItemCount(); i++) {
final ClipData.Item item = mClipData.getItemAt(i);
final Uri mImageUri = item.getUri();
mArrayUri.add(mImageUri);
// Get the cursor
Cursor cursor = getContentResolver().query(mImageUri, filePathColumn, null, null, null);
// Move to first row
cursor.moveToFirst();
final StorageReference profileStorage = uploadStorage.child(mImageUri.getLastPathSegment());
uploadTask = profileStorage.putFile(mImageUri);
final int finalI = i;
uploadTask.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
showMessage(e.toString());
}
}).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
Task<Uri> urlTask = uploadTask.continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
@Override
public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
if (!task.isSuccessful()){
throw task.getException();
}
downloadURL = profileStorage.getDownloadUrl().toString();
return profileStorage.getDownloadUrl();
}
}).addOnCompleteListener(new OnCompleteListener<Uri>() {
@Override
public void onComplete(@NonNull Task<Uri> task) {
if(task.isSuccessful()){
Uri uri = task.getResult();
idRef.child(mImageUri.getLastPathSegment()).setValue(uri.toString());
}
}
}).addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
showMessage("image upload successful ");
// activity opens multiple times check it //
a++;
}
});
}
});
if(a == mClipData.getItemCount()){
Intent intent = new Intent(getApplicationContext(), DisplayImages.class);
startActivity(intent);
}
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
imageEncoded = cursor.getString(columnIndex);
imagesEncodedList.add(imageEncoded);
cursor.close();
}
}
最佳答案
上载图像时,每个图像按以下顺序进行:
您开始上传。
完成后,您将确定图像的下载URL。
完成后,将下载URL写入数据库。
这些操作都是异步的,您可以通过任务进行处理。由于您希望仅在所有下载URL都写入数据库后才显示弹出窗口,因此代码应位于最后一个完成处理程序中:
}).addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
showMessage("image upload successful ");
// activity opens multiple times check it //
a++;
if(a == mClipData.getItemCount()){
Intent intent = new Intent(getApplicationContext(), DisplayImages.class);
startActivity(intent);
}
}
});