如何在Firebase中检查写入任务是否成功

Ale*_*303 6 android firebase firebase-authentication firebase-realtime-database

我对Firebase完全不熟悉并且需要知道如何检查我的写作任务是否成功,因为如果我不这样做,那么MainActivity启动会让我的Register进步变得混乱.

这将检查是否Username已经采取并注册用户,如果不是:

Query usernamequery = myRef.orderByChild("Username").equalTo(Username);

usernamequery.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot snapshot) {
        if (snapshot.exists()) {
            // TODO: handle the case where the data already exists
            editText.setError("Username taken!");
            return;
        }
        else {
            // TODO: handle the case where the data does not yet exist
            myRef.child("Users").child(Username).child("Userid").setValue(user.getUid());
            myRef.child("Users").child(Username).child("Username").setValue(Username);
            startActivity(maps);
            finish();
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        Toast.makeText(Username.this, "Error", Toast.LENGTH_LONG).show();
    }
});
Run Code Online (Sandbox Code Playgroud)

但我希望只有在激活时才会触发Intent to Main Activity(地图) myRef.child("Users").child(Username).child("Userid").setValue(user.getUid());

另一个完成任务并取得成功.

我能做什么?

Fra*_*len 24

要知道写操作何时完成,请添加完成侦听器:

myRef.child("Users").child(Username).child("Userid").setValue(user.getUid(), new DatabaseReference.CompletionListener() {
    void onComplete(DatabaseError error, DatabaseReference ref) {
        System.out.println("Value was set. Error = "+error);
    }
});
Run Code Online (Sandbox Code Playgroud)

如果您想通过一次操作写入多个位置,则需要查看该update()方法:https://firebase.google.com/docs/database/android/read-and-write#updating_or_deleting_data

setValue()此处记录了正确的重载:https://firebase.google.com/docs/reference/android/com/google/firebase/database/DatabaseReference.html#setValue(java.lang.Object,%20com.google.firebase .database.DatabaseReference.CompletionListener)

  • 但是如何在配置更改后重新附加`DatabaseReference.CompletionListener`(旧的`Activity`已经被销毁并且创建了一个新的). (2认同)
  • 如果操作失败,将给出错误。如果成功,则错误将为空 (2认同)