我正在尝试使用以下结构将数据保存到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
侦听器,我是否正确保存到实时数据库?
答案 0 :(得分:1)
您正在使用addOnSuccessListener()的活动范围形式。该文档指出:
在onStop()
期间将自动删除侦听器
对于未被调用的侦听器,最可能的解释是,作为第一个参数(this
)传递的活动已完成,并且其onStop()
方法被调用。要确认是这种情况,请删除this
参数并查看是否调用了侦听器。