实际上,我想使用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;
}
}
答案 0 :(得分:0)
此代码String key = mDatabaseRef.child("Products").push().getKey();
将生成一个新的唯一ID。如果要更新现有产品,则需要知道该现有产品的密钥。
有两种方法可以知道要更新的产品的密钥:
第一个选项是最常见的,因为您通常已经从数据库中加载了数据,并且可以在已经加载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);
}