使用Firebase push()方法为User提供唯一的子键值

时间:2016-10-08 15:24:46

标签: android firebase firebase-realtime-database

如何在push()中提供用户定义的键值,而不是push?创建的唯一值?

这就是我目前正在做的事情:

User user = new User(Editname.getText().toString(),
      Editpid.getText().toString(),Editsem.getText().toString());

mRef.child("users").push().setValue(user);

3 个答案:

答案 0 :(得分:5)

.push()将创建一个带有唯一引用的新项目。

您可以使用updateChildren()进行更新。例如,

User user=new User(Editname.getText().toString(),Editpid.getText().toString(),Editsem.getText().toString()); 
Map<String, Object> itemValues = user.toMap();
Map<String, Object> childUpdates = new HashMap<>();

// Define the key value here
String username = "yourKeyValueHere";
childUpdates.put("/users/" + username, itemValues);
mDatabase.updateChildren(childUpdates);

您可能需要向User类添加类似于以下内容的内容。

@Exclude
public Map<String, Object> toMap() {
    HashMap<String, Object> result = new HashMap<>();
    result.put("name", name);
    result.put("pid", pid);
    result.put("sem", sem);
    return result;
}

答案 1 :(得分:2)

最简单的方法是使用child方法指定子键:

User user = new User(Editname.getText().toString(),
     Editpid.getText().toString(),Editsem.getText().toString());

mRef.child("users").child(user.pid).setValue(user);

在我指定user.pid的位置,您可以使用您用来识别用户的任何唯一密钥(通常在使用Firebase身份验证时,这将是user.getUid())。

答案 2 :(得分:1)

这是一种方法,假设我们想要将用户的名称用作唯一键:

User user = new User(Editname.getText().toString(),
  Editpid.getText().toString(),Editsem.getText().toString());

 String uniqueKey = user.getName();
 //You could use something else for quick reference since two users can have the same name
 mDatabaseReference.child("users").child(uniqueKey).push().setValue(user);