【问题标题】:Updating specific item in realtime database using recycler view使用回收站视图更新实时数据库中的特定项目
【发布时间】:2019-09-07 12:36:09
【问题描述】:

实际上,我想使用 firebase 实时数据库更新回收站视图中的特定项目。我创建了一个模式并将其包含在我的 java 文件中。 但我无法更新我的 firebase 实时数据库中存在的任何项目,这些项目已使用添加项目按钮保存。

首先,我尝试获取特定的项目 id,但它总是返回随机键,而不是在选择单击时返回项目的键。 我只想更新当前所选产品项目的现有记录中的产品描述和产品价格。

UpdateActivity.java

mStorageRef = FirebaseStorage.getInstance().getReference("Products"); 
mDatabaseRef = FirebaseDatabase.getInstance().getReference()
               .child("Products");

Products 是 firebase 中的表名

private void update_item_actual() {
  String productdescription = updateproductdescription.getText()
                              .toString();
    String productrate = updateproductrate.getText().toString();

    String key = mDatabaseRef.child("Products").push().getKey();

    //I need to perform update here
}

存储架构 封装模型;

public class StorageSchema {


    private String productdescription;
    private int rate;
    private int position;
    private String key;


    public StorageSchema(){
        //empty constructor needed
    }

    public StorageSchema(int position){
        this.position=position;
    }

    public StorageSchema(String productdescription, int rate){
        if(productdescription.trim().equals("")){
            productdescription = "No Name";
        }
        this.productdescription = productdescription;
        this.rate = rate;
    }

    public String getProductdescription() {
        return productdescription;
    }

    public int getRate() {
        return rate;
    }

    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
    }
}

【问题讨论】:

    标签: android firebase-realtime-database


    【解决方案1】:

    此代码String key = mDatabaseRef.child("Products").push().getKey(); 将生成一个新的唯一 ID。如果您想更新现有产品,则需要知道该现有产品的密钥。

    有两种方法可以知道要更新的产品的密钥:

    1. 从加载数据的那一刻起,您就已将其传递到您的应用程序中。
    2. 您有一些其他值允许您对数据库执行查询以查找键。

    第一个选项是最常见的,因为您通常已经从数据库中加载数据,并且可以在您已经加载 DataSnapshot.getValue() 时“简单地”传递 DataSnapshot.getKey()

    获得产品/子节点的密钥后,您可以使用以下命令更新其数据:

    private void update_item_actual() {
      String productdescription = updateproductdescription.getText()
                                  .toString();
      String productrate = updateproductrate.getText().toString();
    
      String key = "-Lckhadu10a9813"; // TODO: use the key you passed along or looked up
    
      Map<String, Value> values = new HashMap<>();
      values.put("productdescription", productdescription);
      values.put("rate", productrate);
    
      mDatabaseRef.child(key).updateChildren(values);
    }
    

    【讨论】:

      猜你喜欢
      • 2018-03-28
      • 2021-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多