2017-12-19 4 views
0

Ich möchte überprüfen, ob eine ID bereits vor dem Einfügen vorhanden ist (verhindern Sie die Aktualisierung einer bereits vorhandenen ID). Dies ist der Code, den ich bisher habe:Benachrichtigen Sie Benutzer, wenn Firebase-Datenbank-ID existiert

database.child(id).addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     if (dataSnapshot.exists()) { 
      Toast.makeText(getApplicationContext(), "it exists.", Toast.LENGTH_SHORT).show(); 
     } 
     else { 
      Toast.makeText(getApplicationContext(), "it's OK.", Toast.LENGTH_SHORT).show(); 
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 
     Toast.makeText(getApplicationContext(), databaseError.getMessage(), Toast.LENGTH_SHORT).show(); 
    } 
}); 

Das Problem ist, dass, wenn die ID nicht nicht existiert, beiden Toasts zeigt. Aber wenn es existiert, zeigt es nur das "es existiert". ein.

Wie kann ich das "es existiert." Toast nur, wenn die ID existiert/Wie kann ich verhindern, dass es existiert? Toast von zeigen, wenn die ID nicht existiert?

EDIT:

Firebase Datenbankstruktur:

-DATABASE 
    -ID 
     -NAME 
     -DESCRIPTION 
+1

Können Sie Feuerbasis db Struktur teilen – R2R

Antwort

1

Bitte:

database.child(id).addListenerForSingleValueEvent(new ValueEventListener() { 
@Override 
public void onDataChange(DataSnapshot dataSnapshot) { 
    if (dataSnapshot.exists()) { 
     Toast.makeText(getApplicationContext(), "it exists.", Toast.LENGTH_SHORT).show(); 
    } 
    else { 
     Toast.makeText(getApplicationContext(), "it's OK.", Toast.LENGTH_SHORT).show(); 
    } 
} 

Seit der valueeventListener wird durch das ganze Kind iterieren (id) damit Sie beide Toast bekommen derjenige denn existiert und gibt es nicht.

Verwenden Sie die addListenerForSingleValueEvent dann wird es nur in der ID, die Sie zuvor angeben, iterieren.

1

Versuchen Sie addValueEventListener Methode mit addListenerForSingleValueEvent ersetzen.

Da möglicherweise addValueEventListener wird zweimal aufgrund der Änderung in Daten aufgerufen Das ist der Grund, dass es zunächst zeigt Exist und dann nicht Exist für die gleiche ID.

Für addListenerForSingleValueEvent Feuerbasis heißt es, dass es angeblich:

Daten lesen einmal.

In einigen Fällen kann es nützlich sein, dass ein Callback einmal aufgerufen wird und dann sofort entfernt wird. Wir haben eine Hilfsfunktion erstellt, dies zu machen einfach: diese

1

Versuchen Sie, wie dieses

database.child(id).addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     if (dataSnapshot.getValue()!=null) { 
      Toast.makeText(getApplicationContext(), "it exists.", Toast.LENGTH_SHORT).show(); 
     } 
     else { 
      Toast.makeText(getApplicationContext(), "it's OK.", Toast.LENGTH_SHORT).show(); 
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 
     Toast.makeText(getApplicationContext(), databaseError.getMessage(), Toast.LENGTH_SHORT).show(); 
    } 
}); 
Verwandte Themen