如何在push()
中提供用户定义的键值,而不是push?创建的唯一值?
这就是我目前正在做的事情:
User user = new User(Editname.getText().toString(),
Editpid.getText().toString(),Editsem.getText().toString());
mRef.child("users").push().setValue(user);
答案 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);