2 回答

TA貢獻(xiàn)1934條經(jīng)驗(yàn) 獲得超2個(gè)贊
我知道為同一件事設(shè)置兩個(gè) OnSuccessListener 效率低下
您有兩個(gè)要嘗試完成的任務(wù):
上傳一個(gè)文件
獲取該文件的下載 URL
由于這是兩個(gè)獨(dú)立的任務(wù),因此您需要兩個(gè)OnSuccessListeners. 這并沒有什么低效的地方,任務(wù)也不盡相同。
上傳后獲取下載 URL的 Firebase 文檔準(zhǔn)確地展示了如何連續(xù)完成這兩個(gè)任務(wù):
final StorageReference ref = storageRef.child("images/mountains.jpg");
uploadTask = ref.putFile(file);
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();
}
// Continue with the task to get the download URL
return ref.getDownloadUrl();
}
}).addOnCompleteListener(new OnCompleteListener<Uri>() {
@Override
public void onComplete(@NonNull Task<Uri> task) {
if (task.isSuccessful()) {
Uri downloadUri = task.getResult();
} else {
// Handle failures
// ...
}
}
});
您會(huì)注意到,此代碼首先完成uploadTask(上傳文件),然后才開始一個(gè)新任務(wù)以獲取下載 URL。按此順序執(zhí)行任務(wù)可防止您收到“對象在該位置不存在”錯(cuò)誤消息。

TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超8個(gè)贊
嘗試使用這個(gè):
private Uri ImageUri; //and get image from gallery intent to this ImageUri
...............
StorageReference filePath = FirebaseStorage.getInstance().getReference().child("Club Images").child(ImageUri.getLastPathSegment() + ".jpg");
filePath.putFile(ImageUri).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
@Override
public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task)
{
if(task.isSuccessful())
{
downloadUrl = task.getResult().getDownloadUrl().toString();
updatetoFirebaseDatabase();
}
else
{
String message = task.getException().getMessage();
}
}
});
...........
創(chuàng)建 updatetoFirebaseDatabase(String imageUrl) 方法:
updatetoFirebaseDatabase(String imageUrl){
//implement FirebaseDatabase setvalue method with given image URL
}
添加回答
舉報(bào)