![](/img/trans.png)
[英]getDownloadUrl Firebase Storage returns Null (Android)
[英]Android - Firebase Storage getDownloadUrl returns null on first call
我目前在我的Android應用中具有一項功能,該功能使我可以發表評論並在其中附加照片。 注釋通過其下載URL對圖像的引用被上傳到Cloud Firestore,注釋被上傳到Firebase Storage。
我遇到的問題是,在第一次調用該方法時,它似乎沒有檢索到下載URL,但是當我進行第二次調用時,它成功地檢索了該URL。 在下面,我包括了該方法,這簡稱為“按鈕單擊偵聽器”。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_event_comments);
submitComment.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
newComment();
}
});
private void newComment() {
Date date = new Date();
EventComment mcomment = new EventComment();
mcomment.setComment(commentText.getText().toString());
mcomment.setDate_created(date);
// mcomment.setUsername(firebaseAuth.getCurrentUser().getEmail());
String commentID = Long.toHexString(Double.doubleToLongBits(Math.random()));
StorageReference filePath = firebaseStorage.child("Photos").child(imageUri.getLastPathSegment());
filePath.putFile(imageUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
if(taskSnapshot.getDownloadUrl() != null){
imgDownloadUri = taskSnapshot.getDownloadUrl();
} else if(taskSnapshot.getMetadata().getDownloadUrl() != null) {
imgDownloadUri = taskSnapshot.getMetadata().getDownloadUrl();
}
Toast.makeText(getApplicationContext(), "Image uploaded", Toast.LENGTH_SHORT).show();
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
}
});
if (imgDownloadUri != null) {
mcomment.setImageUri(imgDownloadUri.toString());
}
firestore.collection("events").document(event_id).collection("comments").document(commentID)
.set(mcomment, SetOptions.merge()).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
Toast.makeText(EventCommentsActivity.this, "Comment posted successfully", Toast.LENGTH_SHORT).show();
}
});
}
firestore.collection("events").document(event_id).collection("comments").document(commentID)
.set(mcomment, SetOptions.merge()).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
Toast.makeText(EventCommentsActivity.this, "Comment posted successfully", Toast.LENGTH_SHORT).show();
}
});
我已經調試了多次,但不確定是什么原因造成的。 也許是按照回調的工作方式進行操作,而將回調功能全部放在一種方法中可能會引起問題?
對於任何反饋,我們都表示感謝。
干杯
我在代碼中進行解釋,請參見代碼內部的注釋,如果您有任何疑問,請詢問!
private void newComment() {
StorageReference filePath = firebaseStorage.child("Photos").child(imageUri.getLastPathSegment());
//start progessbar here
filePath.putFile(imageUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
if(taskSnapshot.getDownloadUrl() != null){
imgDownloadUri = taskSnapshot.getDownloadUrl();
} else if(taskSnapshot.getMetadata().getDownloadUrl() != null) {
imgDownloadUri = taskSnapshot.getMetadata().getDownloadUrl();
}
if (imgDownloadUri != null) {
//close progessbar here
mcomment.setImageUri(imgDownloadUri.toString());
}
Toast.makeText(getApplicationContext(), "Image uploaded", Toast.LENGTH_SHORT).show();
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
}
});
firestore.collection("events").document(event_id).collection("comments").document(commentID)
.set(mcomment, SetOptions.merge()).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
Toast.makeText(EventCommentsActivity.this, "Comment posted successfully", Toast.LENGTH_SHORT).show();
}
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.