当我尝试添加Firebase.CompletionListener到时,出现此错误ValueEventListener。
Firebase.CompletionListener
ValueEventListener
com.google.firebase.database.DatabaseException: Failed to parse node with class class c.kristofer.jaxx.MainActivity.MainActivity$2$1$1 at com.google.android.gms.internal.firebase_database.zzjd.zza(Unknown Source) at com.google.android.gms.internal.firebase_database.zzjg.zzc(Unknown Source) at com.google.firebase.database.DatabaseReference.setValue(Unknown Source) at c.kristofer.jax2.MainActivity.MainActivity$2$1.onDataChange(MainActivity.java:110) at com.google.android.gms.internal.firebase_database.zzfc.zza(Unknown Source) at com.google.android.gms.internal.firebase_database.zzgx.zzdr(Unknown Source) at com.google.android.gms.internal.firebase_database.zzhd.run(Unknown Source) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6682) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
这是我从这里得到的代码:
fromPath = FirebaseDatabase.getInstance() .getReference() .child("Groups") .child(uid) .child(uid); toPath = FirebaseDatabase.getInstance() .getReference() .child("Groups") .child(deeplink.getQueryParameter("groupUid")) .child(uid); userIdPath = FirebaseDatabase.getInstance() .getReference() .child("Groups") .child(deeplink.getQueryParameter("groupUid")) .child(uid) .child("uid"); deletePath = FirebaseDatabase.getInstance() .getReference() .child("Groups") .child(uid); fromPath.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { toPath.setValue(dataSnapshot.getValue(), new Firebase.CompletionListener() { @Override public void onComplete(FirebaseError firebaseError, Firebase firebase) { if (firebaseError != null) { System.out.println("Data could not be saved. " + firebaseError.getMessage()); } else { System.out.println("Data saved successfully."); userIdPath.setValue(uid); deletePath.removeValue(); } } }); } @Override public void onCancelled(DatabaseError databaseError) { } });
当我不使用该onCompleteListener应用程序时,它运行正常,但崩溃了。
onCompleteListener
实际上,我回答了这个问题,但是当时我使用的API现在被认为是旧的。因此,我建议您使用以下方法:
private void moveRecord(DatabaseReference fromPath, final DatabaseReference toPath) { ValueEventListener valueEventListener = new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { toPath.setValue(dataSnapshot.getValue()).addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { if (task.isComplete()) { Log.d(TAG, "Success!"); } else { Log.d(TAG, "Copy failed!"); } } }); } @Override public void onCancelled(DatabaseError databaseError) {} }; fromPath.addListenerForSingleValueEvent(valueEventListener); }