Android 使用recycler视图更新实时数据库中的特定项

Android 使用recycler视图更新实时数据库中的特定项,android,firebase-realtime-database,Android,Firebase Realtime Database,实际上,我想使用firebase实时数据库更新recycler视图中的特定项目。我已经创建了一个模式,并将其包含在我的java文件中。 但我无法更新firebase实时数据库中的任何项目,该数据库已使用“添加项目”按钮保存 首先,我尝试获取特定的项目id,但它总是返回random key,而不是选中单击时项目的键。 我只想更新所选当前产品项的现有记录中的productdescription和product rate UpdateActivity.java mStorageRef = Fireba

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

首先,我尝试获取特定的项目id,但它总是返回random key,而不是选中单击时项目的键。 我只想更新所选当前产品项的现有记录中的productdescription和product rate

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
}
存储模式 包装模型

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

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

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

  • 从加载数据的那一刻起,您就将其传递给了应用程序
  • 您还有一些其他值,允许您在数据库上执行查询以查找密钥
  • 第一个选项是最常见的,因为您通常已经从数据库加载了数据,并且可以在已经加载
    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);
    }
    
    private void update\u item\u actual(){
    字符串productdescription=updateproductdescription.getText()
    .toString();
    字符串productrate=updateproductrate.getText().toString();
    String key=“-Lckhadu10a9813”//TODO:使用传递或查找的密钥
    映射值=新的HashMap();
    value.put(“productdescription”,productdescription);
    价值。投入(“比率”,生产率);
    mDatabaseRef.child(键).updateChildren(值);
    }