添加图像时未调用firebase存储在核心上



我试图使用以下结构将数据保存到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参数,看看是否调用了侦听器。

最新更新