Android:为啥firebase Push键不改变

Posted

技术标签:

【中文标题】Android:为啥firebase Push键不改变【英文标题】:Android: why the firebase Push key doesn't changeAndroid:为什么firebase Push键不改变 【发布时间】:2022-01-06 18:54:19 【问题描述】:

所以我将图像上传到 firebase 存储,链接将保存在实时 firebase 中

现在我正在使用 for 循环上传图像,我想让上传到存储的图像名称成为 firebase 的推送 ID 给 realTime。

但由于某种原因,图像会在存储中成功保存为不同的推送 id,但是当保存到实时 id 时会是相同的,并且循环会在相同的 ID 内不断更新。 imagePath 是全局变量。

for (uploadCount  = 0; uploadCount < ImageList.size(); uploadCount++) 
        
    imagePath = productRef.child(UID).child("images").push().getKey();
    Uri IndividualImage = ImageList.get(uploadCount);
    StorageReference ImageName = productImagesRef.child(UID).child(imagePath);

    //Compress Images
    Bitmap bmp = null;
    try 
        bmp = MediaStore.Images.Media.getBitmap(getContentResolver(), IndividualImage);
     catch (IOException e) 
        e.printStackTrace();
    
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    bmp.compress(Bitmap.CompressFormat.JPEG, 25, baos);
    byte[] data = baos.toByteArray();
    //End of compressing

    //start on uploading compressed
    ImageName.putBytes(data).addOnSuccessListener(taskSnapshot -> ImageName.getDownloadUrl()
            .addOnSuccessListener(uri -> 
        String url = String.valueOf(uri);
        StoreLink(url);
    ));

这是 firebase 实时上传:

private void StoreLink(String url) 
    HashMap<String ,Object> hashMap = new HashMap<>();
    hashMap.put("image", url);
    hashMap.put("id", imagePath);
    dialog.dismiss();

    assert imagePath != null;
    productRef.child(UID).child("images").child(imagePath).updateChildren(hashMap).addOnSuccessListener(new OnSuccessListener<Void>() 
        @Override
        public void onSuccess(Void aVoid) 
            finish();
        
    );

【问题讨论】:

【参考方案1】:

您没有在任何地方将 imagePath 传递给您的 StoreLink 函数,这让我怀疑它来自某个地方的上下文,而您只是看到它的最后一个值。

修复它,将您的 StoreLink 函数更改为:

                                //           ?
private void StoreLink(String url, String imagePath) 
    HashMap<String ,Object> hashMap = new HashMap<>();
    hashMap.put("image", url);
    hashMap.put("id", imagePath);
    dialog.dismiss();

    assert imagePath != null;
    productRef.child(UID).child("images").child(imagePath).updateChildren(hashMap).addOnSuccessListener(new OnSuccessListener<Void>() 
        @Override
        public void onSuccess(Void aVoid) 
            finish();
        
    );

然后调用它:

     //           ?
StoreLink(url, imagePath);

【讨论】:

成功了,谢谢

以上是关于Android:为啥firebase Push键不改变的主要内容,如果未能解决你的问题,请参考以下文章

如何获取 Push.Key Firebase for Android Kotlin 中的数据 [关闭]

为啥 Firebase 在 Android 模拟器上运行时在 PhoneGap 应用程序中返回 404 错误?

为啥从 firebase 控制台发送的通知能够绕过 android 后台任务限制? - 反应原生火力基地 -

为啥不获取 Android Firebase FCM 注册令牌?

Firebase FCM - 为啥会收到:有效负载错误,无效的“android”(或“apns”)属性

为啥 Firebase 控制台在 SDK 已与我的 Android 和 iOS 应用程序集成时要求我实施 SDK?