添加图片时未调用Firebase存储onSuccess

时间:2017-12-10 11:19:42

标签: java android firebase firebase-realtime-database firebase-storage

我正在尝试使用以下结构将数据保存到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侦听器,我是否正确保存到实时数据库?

1 个答案:

答案 0 :(得分:1)

您正在使用addOnSuccessListener()的活动范围形式。该文档指出:

  

在onStop()

期间将自动删除侦听器

对于未被调用的侦听器,最可能的解释是,作为第一个参数(this)传递的活动已完成,并且其onStop()方法被调用。要确认是这种情况,请删除this参数并查看是否调用了侦听器。