5

Jestem całkowicie nowy w Firebase i muszę wiedzieć, jak sprawdzić, czy moje zadanie pisania zakończyło się pomyślnie, ponieważ jeśli nie, MainActivity zaczyna się i psuje mój postęp w Register.Jak sprawdzić, czy pisanie zadań zakończyło się sukcesem w Firebase

Sprawdza czy Username jest już zajęta i rejestruje użytkownika, jeśli to nie jest:

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

Ale chcę zamiarem główny przedmiot (mapy) być zwolniony tylko wtedy, gdy myRef.child("Users").child(Username).child("Userid").setValue(user.getUid());

i drugi kończy się swoim zadaniem i odnosi sukcesy.

Co mogę zrobić?

+0

umieścić słuchacza na zmiany wartości, a kiedy zmienia następnie rozpocząć inną działalność. – Blundell

Odpowiedz

17

Aby wiedzieć, kiedy operacja zapisu została zakończona, dodać detektor realizacji:

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

Jeśli chcesz napisać do wielu lokalizacji z jednej operacji, będziemy chcieli przyjrzeć się metodzie update(): https://firebase.google.com/docs/database/android/read-and-write#updating_or_deleting_data

prawidłowa przeciążenia dla setValue() jest udokumentowane tutaj: https://firebase.google.com/docs/reference/android/com/google/firebase/database/DatabaseReference.html#setValue(java.lang.Object,%20com.google.firebase.database.DatabaseReference.CompletionListener)

+2

Ale jak mogę ponownie dołączyć 'DatabaseReference.CompletionListener' po zmianach konfiguracji (stary" Activity "został zniszczony i utworzono nowy)? – Storix

+0

Jeśli operacja się nie powiedzie, zostanie wyświetlony błąd. Jeśli udało się, błąd będzie zerowy –

Powiązane problemy