使用回收者视图更新实时数据库中的特定项目

时间:2019-09-07 12:36:09

标签: android firebase-realtime-database

实际上,我想使用Firebase实时数据库在“回收者”视图中更新特定项目。我已经创建了一个架构并将其包含在我的java文件中。 但是我无法更新Firebase实时数据库中存在的,已使用“添加项目”按钮保存的任何项目。

首先,我尝试获取特定的项目ID,但是它始终返回随机键,但单击时不返回该项目的键。 我只想更新所选当前产品项的现有记录中的产品说明和产品费率。

UpdateActivity.java

mStorageRef = FirebaseStorage.getInstance().getReference("Products"); 
mDatabaseRef = FirebaseDatabase.getInstance().getReference()
               .child("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
}

StorageSchema     封装模型;

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;
    }
}

1 个答案:

答案 0 :(得分:0)

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

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

  1. 从加载数据的那一刻起,您便已将其传递给应用程序。
  2. 您还有其他一些值,使您可以对数据库执行查询以查找密钥。

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

一旦有了product / child节点的密钥,就可以使用以下命令更新其数据:

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);
}