Ale4303
Ale4303

Reputation: 459

How to check if writing task was successful in Firebase

I'm totally new to Firebase and need to know how to check if my writing task was successful because if I don't, the MainActivity starts and messes up my Register progress.

This checks if Username is already taken and registers the user if it isn't:

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

But I want the Intent to Main Activity (maps) only be fired when myRef.child("Users").child(Username).child("Userid").setValue(user.getUid());

and the other one is finished with its task and is successful.

What can I do?

Upvotes: 8

Views: 14146

Answers (1)

Frank van Puffelen
Frank van Puffelen

Reputation: 599041

To know when a write operation has completed on the server, add a completion listener:

myRef.child("Users").child(Username).child("Userid").setValue(user.getUid(), new DatabaseReference.CompletionListener() {
    void onComplete(DatabaseError error, DatabaseReference ref) {
        System.err.println("Value was set. Error = "+error);
        // Or: throw error.toException();
    }
});

If there was an error, details will be in the error operation. If the write operation was completed without problems, the error will be null.

If you want to write to multiple locations with a single operation, you'll want to look at the update() method

The correct overload for setValue() is documented here.

Upvotes: 31

Related Questions