我只是想将我保存在一个Firebase位置的信息复制到另一个:
mFollowingCheck.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
if (b){
mBaseRef.child(USERS_LABEL).child(mUserID).child(FOLLOWING_LABEL).child(USERS_LABEL).child(mPollCreatorID).child(DISPLAY_NAME_LABEL).setValue(mPollCreatorDisplayName);
mBaseRef.child(POLL_LABEL).child(pollID).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
mBaseRef.child(USERS_LABEL).child(mUserID).child(FOLLOWING_LABEL).child(POLL_LABEL).child(pollID).setValue(dataSnapshot);
}
@Override
public void onCancelled(DatabaseError databaseError) {
Toast.makeText(getContext(), databaseError.getCode(), Toast.LENGTH_LONG).show();
}
});
} else {
mBaseRef.child(USERS_LABEL).child(mUserID).child(FOLLOWING_LABEL).child(USERS_LABEL).child(mPollCreatorID).child(DISPLAY_NAME_LABEL).removeValue();
}
}
});
当我有这个代码时,应用程序就会崩溃。没有记录错误,我无法确切地指出我做错了什么。从本质上讲,我想了解复制Firebase数据的最佳做法。
答案 0 :(得分:4)
在onDataChange()
中,您应该存储DataSnapshot的值,而不是Datasnapshot
对象本身。
变化:
setValue(dataSnapshot);
到
setValue(dataSnapshot.getValue());
另外,显示Toast
的代码是错误的:
Toast.makeText(getContext(), databaseError.getCode(), Toast.LENGTH_LONG).show();
databaseError.getCode()
返回int
,这意味着您正在调用需要字符串资源ID的makeText()形式。改为:
Toast.makeText(getContext(), databaseError.getMessage(), Toast.LENGTH_LONG).show();