【发布时间】:2020-09-20 00:28:05
【问题描述】:
将图像上传到 Firebase 云存储后,我想将其公共下载 URL 添加到我的实时数据库中的子节点。
我的文件上传代码
private void uploadFile() {
if (imageUri != null) {
StorageReference fileRef = storageReference.child(UID + "/pic" + ".png");
UploadTask uploadTask = fileRef.putFile(imageUri);
uploadTask.addOnSuccessListener(OrderPickupActivity.this, new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
fileRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
imageURL = uri.toString();
}
});
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(OrderPickupActivity.this, e.toString(), Toast.LENGTH_LONG).show();
}
});
} else {
Toast.makeText(this, "Choose an image!", Toast.LENGTH_SHORT).show();
}
}
上传到实时数据库
uploadFile();
PickupDetails newPickup = new PickupDetails(
date,
time,
name,
email,
address,
pinCode,
UID,
phoneNumber,
imageURL
);
FirebaseDatabase.getInstance().getReference("Pending-Requests")
.child(FirebaseAuth.getInstance().getCurrentUser().getUid())
.setValue(newPickup)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
//Toast.makeText(OrderPickupActivity.this, "Success!", Toast.LENGTH_LONG).show();
progressBar.setVisibility(View.GONE);
startActivity(new Intent(OrderPickupActivity.this, MainActivity.class));
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(OrderPickupActivity.this, "Error, " + e, Toast.LENGTH_LONG).show();
progressBar.setVisibility(View.GONE);
}
});
取件详情类
public class PickupDetails {
public String date, time, userName, userEmail, userAddress, pinCode, userUID, phoneNumber, image;
public PickupDetails(String date, String time, String userName, String userEmail, String userAddress, String pinCode, String userUID, String phoneNumber, String image) {
this.date = date;
this.time = time;
this.userName = userName;
this.userEmail = userEmail;
this.userAddress = userAddress;
this.pinCode = pinCode;
this.userUID = userUID;
this.phoneNumber = phoneNumber;
this.image = image;
}
}
我在 StackOverflow 上使用过类似问题的答案,但似乎没有一个对我有帮助。当我记录结果时,我能够获取该值,但它没有到达数据库。
【问题讨论】:
-
看起来您实际上并没有尝试向实时数据库写入任何内容。
-
我做了...对不起,我没有在问题中添加它
-
如果没有看到无法按您期望的方式运行的代码,以及对您想要完成的工作的更完整描述,我们几乎无能为力。
-
我将代码添加到数据库中,主要问题是,除了 imageURL 之外,所有其他值在数据库中都是可见的
-
可能是因为在上传完成之前数据库正在更新。在你的代码中加入一些日志语句来调试它,看看它是如何工作的。 Firebase API 都是异步的。
标签: java android firebase firebase-realtime-database firebase-storage