Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-将updateChildren()与HashMap一起使用_Android_Firebase - Fatal编程技术网

Android-将updateChildren()与HashMap一起使用

Android-将updateChildren()与HashMap一起使用,android,firebase,Android,Firebase,我正在使用listview和arrayadapter,其中我使用简单的列表项多项选择,因此我可以在listview中选择多个项 我想做什么:我想将所有选定的项目插入我的Firebase数据库。为此,我使用了hashmap 我所做的: addUsersButton.setOnClickListener(new View.OnClickListener() { HashMap<String, Object> drivers = new HashMap<>()

我正在使用listview和arrayadapter,其中我使用简单的列表项多项选择,因此我可以在listview中选择多个项

我想做什么:我想将所有选定的项目插入我的Firebase数据库。为此,我使用了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时,该节点中的所有其他内容都会被删除。