我试图从我的数据库中的一个节点(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 回答
"This method executes once perfectly..."是addListenerForSingleValueEvent的预期行为 . 来自文档:
addValueEventListener听起来更适合这种情况 .
如果您始终需要将
groups/groupId/matches
中写入的数据复制到users/userId/groups
中,则最好使用Firebase Cloud Function with a Realtime Database trigger .