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);
}
});
}
所以我正在使用 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);
}
});
}