我正在尝试将数据库中的一个节点(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();
}
});
}
答案 0 :(得分:0)
“此方法执行一次完美......”是addListenerForSingleValueEvent
的预期行为。来自文档:
为此位置的数据中的单个更改添加侦听器。该侦听器将使用该位置的数据值触发一次。
addValueEventListener
听起来更适合这种情况。
如果您始终需要将从groups/groupId/matches
写入的数据复制到users/userId/groups
,则最好使用Firebase Cloud Function with a Realtime Database trigger。