将图像链接从 Firebase 存储存储到 Firebase 数据库时出错

Posted

技术标签:

【中文标题】将图像链接从 Firebase 存储存储到 Firebase 数据库时出错【英文标题】:Error in storing image link from firebase storage to firebase database 【发布时间】:2021-07-12 17:53:24 【问题描述】:

我想将存储在 Firebase 存储中的图像链接存储到 Firebase 实时数据库中。

链接字段未在 Firebase 中创建,还附上截图请参考:

MainActivity.java

private void UploadDataIntoFirebase() 

    if(selected_image != null) 
        ProgressDialog progressDialog = new ProgressDialog(this);
        progressDialog.setTitle("Uploading...");
        progressDialog.show();
        count++;
        storageReference.putFile(selectedImage)
        .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() 
            @Override
            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) 

                progressDialog.dismiss();
                Snackbar.make(findViewById(android.R.id.content), "Image Uploaded successfully", Snackbar.LENGTH_SHORT).show();
                storageReference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() 
                    @Override
                    public void onSuccess(Uri uri) 
                        itemInfo.setLink(""+uri.toString());
                        Toast.makeText(getApplicationContext(), "" + uri.toString(), Toast.LENGTH_SHORT).show();
                    
                );

                databaseReference.setValue(itemInfo);
                // Intent intent=new Intent(getApplicationContext(), Item_successfully_added.class);
                //startActivity(intent);

            )
        .addOnFailureListener(new OnFailureListener() 
            @Override
            public void onFailure(@NonNull Exception e) 
                progressDialog.dismiss();
                Toast.makeText(getApplicationContext(),"Failed",Toast.LENGTH_SHORT).show();
            
        )
        .addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() 
            @Override
            public void onProgress(@NonNull UploadTask.TaskSnapshot takeSnapshot) 
                double progress
                = (100.0
                    * takeSnapshot.getBytesTransferred()
                    / takeSnapshot.getTotalByteCount());
                progressDialog.setMessage(
                    "Uploaded "
                    + (int)progress + "%");
            
        );

    

ItemInfo.java

package com.example.adminapp;

public class ItemInfo 
   public String name;
    public String price,no_of_items,brand_name,selling_price,discount,link;
    public ItemInfo() 
    

    public void setSelling_price(String selling_price) 
        this.selling_price = selling_price;
    

    public void setDiscount(String discount) 
        this.discount = discount;
    

    public void setBrand_name(String brand_name) 
        this.brand_name = brand_name;
    

    public void setLink(String link) 
        this.link = link;
    

    public void setName(String name)
        this.name=name;
    

    public void setPrice(String price) 
        this.price=price;
    

    public void setNo_of_items(String no_of_items) 
        this.no_of_items=no_of_items;
    

    public String getName() 
        return  name;
    

    public String getPrice() 
        return price;
    

    public String getNo_of_items() 
        return no_of_items;
    

    public String getDiscount() 
        return discount;
    

    public String getSelling_price() 
        return selling_price;
    

    public String getBrand_name() 
        return brand_name;
    

    public String getLink() 
        return link;
    

此代码正在正确执行,但在 Firebase 实时数据库中它没有创建字段“链接”

Firebase 截图:

【问题讨论】:

【参考方案1】:

链接字段未在 Firebase 中创建

发生这种情况是因为您使用以下代码行将“itemInfo”对象添加到数据库中:

databaseReference.setValue(itemInfo);

在回调之外。 Firebase API 是异步的。任何需要来自异步操作的数据的代码都需要在“onSuccess()”方法中,或者从那里调用。因此,在这种情况下,最简单的解决方案是将上面的代码行移动到“onSuccess()”方法的后面:

Toast.makeText(getApplicationContext(),""+uri.toString(),Toast.LENGTH_SHORT).show();

【讨论】:

嘿阿拉文德!我可以帮助您了解其他信息吗?如果您认为我的回答对您有所帮助,请考虑通过单击左侧投票箭头下方的复选标记(✔️)来接受它。应将颜色更改为绿色。我真的很感激。谢谢!

以上是关于将图像链接从 Firebase 存储存储到 Firebase 数据库时出错的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Firebase Web 将图像从链接保存到 Firebase 存储?

将多个图像存储到 Firebase 并获取 url

将图像从 Firebase 存储链接到 Firestore 文档并在 React Native 中显示它们

Firebase 存储 - 将图像上传到 Firebase 存储并在实时数据库中创建指向该图像的链接

将图像批量导入 Firebase 存储并将下载链接添加到 Firebase 数据库节点

将一个用户的图像上传到 Firebase 存储时,数据库中每个用户的图像链接都会更新