【发布时间】:2019-06-27 10:14:43
【问题描述】:
基本上,我创建了一个名为“俱乐部”的课程。我成功地将一个新俱乐部保存到 Firebase 实时数据库,没有出现任何实际问题,直到我想将 Firebase 存储中的 imageURL(称为 clubImage)添加到我的俱乐部类。
我可以使用以下代码成功地将我的图片上传到 Firebase 存储。
private void uploadImage() {
//upload selected image to database
//code from https://code.tutsplus.com/tutorials/image-upload-to-firebase-in-android-application--cms-29934
if(filePath != null)
{
final ProgressDialog progressDialog = new ProgressDialog(this);
progressDialog.setTitle("Uploading...");
progressDialog.show();
final StorageReference ref = storageReference.child("images/"+ UUID.randomUUID().toString());
ref.putFile(filePath)
.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
progressDialog.dismiss();
Toast.makeText(AddClubActivity.this, "Uploaded", Toast.LENGTH_SHORT).show();
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
progressDialog.dismiss();
Toast.makeText(AddClubActivity.this, "Failed "+e.getMessage(), Toast.LENGTH_SHORT).show();
}
})
.addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
@Override
public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
double progress = (100.0*taskSnapshot.getBytesTransferred()/taskSnapshot
.getTotalByteCount());
progressDialog.setMessage("Uploaded "+(int)progress+"%");
}
});
}
}
这一切都很好。但是,在同样的方法中,我也有这段代码,我尝试在其中获取上传图片的下载 URL。
ref.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
Uri downloadUrl = uri;
clubImage = downloadUrl.toString();
}
});
我知道为同一件事设置两个 OnSuccessListener 效率很低,我只是不确定如何同时上传图像和获取 downloadUrl。 无论如何,这不起作用,我的新俱乐部在没有 clubImage 字段的情况下保存。 我收到错误:E/StorageException: StorageException has occurred。 该位置不存在对象。
有谁知道如何解决这个问题? 谢谢。
【问题讨论】:
标签: java android firebase firebase-storage