Android:如何在所有上传完成后完成 activity

Android: how to finish the activity after all Uploads finish

所以我正在使用 for 循环将多个图像上传到 firebase 存储,现在我想在所有图像上传后关闭 Activity

我尝试使用 finish(); 但因为这是一个循环,所以将从第一个循环调用 finish;

for (uploadCount  = 0; uploadCount < ImageList.size(); uploadCount++) {
        
    imagePath = productRef.child(UID).child("images").push().getKey();
    Uri IndividualImage = ImageList.get(uploadCount);
    StorageReference ImageName = productImagesRef.child(UID).child(imagePath);

    //Compress Images
    Bitmap bmp = null;
    try {
        bmp = MediaStore.Images.Media.getBitmap(getContentResolver(), IndividualImage);
    } catch (IOException e) {
        e.printStackTrace();
    }
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    bmp.compress(Bitmap.CompressFormat.JPEG, 25, baos);
    byte[] data = baos.toByteArray();
    //End of compressing

    //start on uploading compressed
    ImageName.putBytes(data).addOnSuccessListener(taskSnapshot -> ImageName.getDownloadUrl()
            .addOnSuccessListener(uri -> {
        String url = String.valueOf(uri);
        StoreLink(url);
    }));
}

这是 firebase 实时上传:

private void StoreLink(String url) {
    HashMap<String ,Object> hashMap = new HashMap<>();
    hashMap.put("image", url);
    hashMap.put("id", imagePath);
    dialog.dismiss();

    assert imagePath != null;
    productRef.child(UID).child("images").child(imagePath).updateChildren(hashMap);
}

你可以声明一个全局变量:

int countLoop = 0;

然后在 storeLink() 中你可以增加:countLoop ++;

和 onSuccessListener() 使用 if 来检查 countLoop == Imagelist.size();

会是这样的:

    private void StoreLink(String url) {
        HashMap<String ,Object> hashMap = new HashMap<>();
        hashMap.put("image", url);
        hashMap.put("id", imagePath);
        dialog.dismiss();

        countLoop ++;
    
        assert imagePath != null;
        productRef.child(ownerUid.getText().toString()).child(Constants.KEY_APARTMENTS)
                    .child(uid_et).child(Constants.KEY_PHASES).child(path).updateChildren(hashMap2).addOnCompleteListener(task -> {
                        if (task.isComplete()) {
                            //////////////////////////////////
                            if (countLoop == ImageList.size()) {
                                loadingDialog.dismiss();
                                finish();
                            }
    
                        } else {
                            loadingDialog.dismiss();
                            String errorMessage = Objects.requireNonNull(task.getException()).toString();
                            showToast("Error: " + errorMessage);
                        }
                    });

}