Firebase DB将数据一个节点复制到另一个节点

时间:2017-05-03 19:33:55

标签: android firebase firebase-realtime-database

我正在尝试将数据库中的一个节点(groups / groupId / matches)添加到另一个节点(users / userId / groups)

此方法执行一次完美,但如果我尝试第二次执行我遇到麻烦,收到此错误

com.google.firebase.database.DatabaseException: 
Failed to convert value of type java.lang.String to boolean

从使用Firebase我不知道SetValue你应该覆盖任何现有数据我已经在我的应用程序中看到了这个

不确定我的下一步行动,我们非常感谢任何帮助。

方法调用

  moveFirebaseRecord(groupsDatabase.child(firebaseUser.getUid()).child("matches"),
                            usersDatabase.child(uId).child("groups"));

方法

    public void moveFirebaseRecord(DatabaseReference fromPath, final DatabaseReference toPath) {
    fromPath.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            toPath.setValue(dataSnapshot.getValue(), new DatabaseReference.CompletionListener() {
                @Override
                public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
                    if (databaseError != null) {
                        Toast.makeText(getApplicationContext(), "COPY FAILED", Toast.LENGTH_LONG).show();
                    } else {
                        Toast.makeText(getApplicationContext(), "COPY SUCCESS", Toast.LENGTH_LONG).show();

                    }
                }
            });
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            Toast.makeText(getApplicationContext(), "onCancelled- copy fail", Toast.LENGTH_LONG).show();

        }
    });
}

1 个答案:

答案 0 :(得分:0)

“此方法执行一次完美......”是addListenerForSingleValueEvent的预期行为。来自文档:

  

为此位置的数据中的单个更改添加侦听器。该侦听器将使用该位置的数据值触发一次。

addValueEventListener听起来更适合这种情况。

如果您始终需要将从groups/groupId/matches写入的数据复制到users/userId/groups,则最好使用Firebase Cloud Function with a Realtime Database trigger