我试图使用以下结构将数据保存到firebase
root
--clothing
----clothingImgDownloadUrl
------title
------category
据我了解,我需要参考数据库中要保存新数据的路径。
FirebaseApp app = FirebaseApp.getInstance();
assert app != null;
mDatabase = FirebaseDatabase.getInstance(app);
mClothingRef = mDatabase.getReference("clothing");
我想使用上面创建的服装参考
添加新衣服mClothingRef.child(clothingImgDownloadUrl).setValue(clothing);
但是,一旦将衣物图像上传到Firebase存储,上面的代码才会运行,并且其下载URL返回到该应用程序,在该应用程序可以用作Firebase数据库中条目的唯一标识符。下面是将图像上传到firebase存储的代码。
FirebaseStorage storage = FirebaseStorage.getInstance();
StorageReference storageRef = storage.getReference(FIREBASE_STORAGE_CLOTHING_REFERENCE);
StorageReference photoRef = storageRef.child(mSelectedImageUri.getLastPathSegment());
photoRef.putFile(mSelectedImageUri)
.addOnSuccessListener(this, new OnSuccessListener<UploadTask.TaskSnapshot>() {
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
// When the image has successfully uploaded, we get its download URL
Log.d("ADMIN_ACTIVITY", "Called");
Uri downloadUrl = taskSnapshot.getDownloadUrl();
assert downloadUrl != null;
String imageUrl = downloadUrl.toString();
Clothing clothing = new Clothing(imageUrl, title, mCategory);
mClothingRepository.addClothing(clothing);
}
});
当应用程序运行并从应用程序的管理员部分中添加了一个服装项目时,图像确实添加到了Firebase存储中,但是最后一个代码段中的日志调用未调用。当然,如果添加了图像,则应调用onSuccess
侦听器,然后应运行addClothing
方法。
为什么未打电话给 onSuccess
侦听器,我是否正确保存到实时数据库?
您正在使用addonSuccessListener()的活动划分形式。文档指出:
在OnStop()
中将自动删除听众
最可能未称呼听众的解释是,作为第一个参数(this
)完成的活动已完成,并调用了其onStop()
方法。为了确认就是这样,请删除this
参数,看看是否调用了侦听器。