小编Sar*_*wal的帖子

将具有多个子节点的 Firebase 节点复制到另一个节点

嘿嘿 我想把有多个子节点的子节点里面的数据复制到别的地方。

数据库

在上图中,我想将问题节点内的数据传输到用户的 uid 节点中。

在问题节点值中,我有两个字段,即正确答案和图像 url。

我已经尝试了以下

public void copyFirebaseData() {
    DatabaseReference questionNodes = FirebaseDatabase.getInstance().getReference().child("questions");
    final DatabaseReference toUsersQuestions = FirebaseDatabase.getInstance().getReference().child("users").child(uid).child("questions");

    questionNodes.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            toUsersQuestions.setValue(dataSnapshot.getValue(), new Firebase.CompletionListener() { //getting error in this line
                @Override
                public void onComplete(FirebaseError firebaseError, Firebase firebase) {

                    if (firebaseError != null)
                        System.out.println("Copy failed");
                    else
                        System.out.println("Success");

                }
            });
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}`
Run Code Online (Sandbox Code Playgroud)

但这会引发异常

02-24 13:47:09.085 7757-7757/curieo.android.zenmaster E/AndroidRuntime: FATAL EXCEPTION: main
                                                                    Process: curieo.android.zenmaster, PID: 7757
                                                                    com.google.firebase.database.DatabaseException: …
Run Code Online (Sandbox Code Playgroud)

android firebase firebase-realtime-database

5
推荐指数
1
解决办法
1712
查看次数

从valueEventListener java返回值

我试图返回一个布尔值,但返回的值始终为false,在这种情况下为0.

check变量是一个实例变量,按下按钮时会调用下面的函数.

private boolean checkAnswerSubmission() {

    DatabaseReference answerDatabase = FirebaseDatabase.getInstance().getReference().child("userPuzzleHistory").child(uid);
    answerDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if (dataSnapshot.hasChild(String.valueOf(imagename))) {
                check = 1;
            } else {
                check = 0;
            }
     //here the value check is working fine but the value cannot be returned from here.
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
    //here the value returned is always 0
    if (check == 1)
        return true;
    else
        return false;

}
Run Code Online (Sandbox Code Playgroud)

android firebase firebase-realtime-database

1
推荐指数
1
解决办法
2252
查看次数