Android-将updateChildren()与HashMap一起使用
我正在使用listview和arrayadapter,其中我使用简单的列表项多项选择,因此我可以在listview中选择多个项 我想做什么:我想将所有选定的项目插入我的Firebase数据库。为此,我使用了hashmap 我所做的:Android-将updateChildren()与HashMap一起使用,android,firebase,Android,Firebase,我正在使用listview和arrayadapter,其中我使用简单的列表项多项选择,因此我可以在listview中选择多个项 我想做什么:我想将所有选定的项目插入我的Firebase数据库。为此,我使用了hashmap 我所做的: addUsersButton.setOnClickListener(new View.OnClickListener() { HashMap<String, Object> drivers = new HashMap<>()
addUsersButton.setOnClickListener(new View.OnClickListener() {
HashMap<String, Object> drivers = new HashMap<>();
@Override
public void onClick(View v) {
int cntChoice = userList.getCount();
SparseBooleanArray sparseBooleanArray = userList.getCheckedItemPositions();
for (int i = 0; i < cntChoice; i++) {
if (sparseBooleanArray.get(i)) {
drivers.put("drivers", userList.getItemAtPosition(i).toString());
}
}
userRef.child(sharedPreferences.getString("school", null)).child("routes").child(key).updateChildren(drivers);
}
});
addUsersButton.setOnClickListener(新视图.OnClickListener(){
HashMap驱动程序=新的HashMap();
@凌驾
公共void onClick(视图v){
int cntChoice=userList.getCount();
SparseBooleanArray SparseBooleanArray=userList.getCheckedItemPositions();
for(int i=0;i
问题:这只会将一个选定项目添加到数据库中。我不知道为什么。对于所选项目的每次迭代,您都会调用:
drivers.put("drivers", userList.getItemAtPosition(i).toString());
这将用指定位置的项覆盖HashMap
中的“drivers”
值,因此您的HashMap
仅包含一个键为“drivers”
的项。这是因为
因此,您需要使用唯一的ID将每个项添加到HashMap
,然后在驱动程序
子节点上调用updateChildren()
:
addUsersButton.setOnClickListener(new View.OnClickListener() {
HashMap<String, Object> drivers = new HashMap<>();
@Override
public void onClick(View v) {
int cntChoice = userList.getCount();
SparseBooleanArray sparseBooleanArray = userList.getCheckedItemPositions();
for (int i = 0; i < cntChoice; i++) {
if (sparseBooleanArray.get(i)) {
String uniqueId = usersRef.push().getKey(); // this doesn't actually push any data to the database
drivers.put(uniqueId, userList.getItemAtPosition(i).toString()); // use the unique ID to add to the HashMap
}
}
userRef.child(sharedPreferences.getString("school", null))
.child("routes")
.child(key)
.child("drivers") // specify "drivers" child node here
.updateChildren(drivers);
}
});
addUsersButton.setOnClickListener(新视图.OnClickListener(){
HashMap驱动程序=新的HashMap();
@凌驾
公共void onClick(视图v){
int cntChoice=userList.getCount();
SparseBooleanArray SparseBooleanArray=userList.getCheckedItemPositions();
for(int i=0;i
通过这种方式,每个项目都将添加到具有唯一ID的
HashMap
,然后将此HashMap
推送到drivers
子节点。是的,它将覆盖该项目。因此,无论选择了多少,它在数据库中只显示一个,因为它覆盖了数据。当我使用setValue时,该节点中的所有其他内容都会被删除。