嘿嘿 我想把有多个子节点的子节点里面的数据复制到别的地方。
在上图中,我想将问题节点内的数据传输到用户的 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) 我试图返回一个布尔值,但返回的值始终为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)