web-dev-qa-db-ja.com

Firebaseで書き込みタスクが成功したかどうかを確認する方法

私は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();
    }
});
_

ただし、Intent to Mainアクティビティ(マップ)は、myRef.child("Users").child(Username).child("Userid").setValue(user.getUid());の場合にのみ起動する必要があります。

もう1つはタスクを終了し、成功しています。

私に何ができる?

7
Ale4303

書き込み操作がいつ完了したかを知るには、完了リスナーを追加します。

_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);
    }
});
_

1回の操作で複数の場所に書き込む場合は、update()メソッドを確認する必要があります: https://firebase.google.com/docs/database/Android/読み取りと書き込み#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)

24