无法将Firebase数据库节点数据复制到另一个节点

时间:2017-09-08 02:27:15

标签: java android firebase firebase-realtime-database

我只是想将我保存在一个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数据的最佳做法。

1 个答案:

答案 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();