2017-12-18 5 views
0

Wie kann ich eine Lücke machen einige Werte aus der Datenbank zu erhalten, aber die Datenbank-Änderungen dieser Daten jedes Mal nicht aktualisieren, ist dies die Leere Ich habe:Get Value aus der Datenbank ohne EvenListener

private void getUser() { 



    userInformationsList.clear(); 
    DatabaseReference.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 

      FirebaseUser user = mAuth.getCurrentUser(); 
      userID = user.getUid(); 
      nameID = dataSnapshot.child("Users").child(userID).child("name").getValue(String.class); 
      Lat = dataSnapshot.child("Users").child(userID).child("Coordenates/Rute/Lat").getValue(String.class); 
      Lng = dataSnapshot.child("Users").child(userID).child("Coordenates/Rute/Lng").getValue(String.class); 
      DataSnapshot dS = dataSnapshot.child("Coordenate").child(Lat).child(Lng); 
      toolbar.setTitle(nameID); 
      for(DataSnapshot Ds : dS.getChildren()) { 
       Object key = Ds.getKey(); 
       String StringKey = String.valueOf(key); 
       getname(StringKey); 
      } 
     } 
     @Override 
     public void onCancelled(DatabaseError databaseError) { 
      Toast.makeText(SearchActivity.this,"Error 404",Toast.LENGTH_SHORT).show(); 
     } 
    }); 
} 

Es funktioniert gut Wenn ich es anrufe, wird es ausgelöst, wenn die Datenbank geändert wird. Ich denke, weil die Leere onDataChange oder ValueEventListener ist.

Ich bin am Wandern, wenn es andere Methode gibt, den DataSnapshot aufzurufen.

Antwort

0

Um nur einmal die Daten aus der Datenbank zu lesen und nicht über Updates benachrichtigt zu werden, registrieren Sie Ihren Listener mit addListenerForSingleValueEvent. Also:

DatabaseReference.addListenerForSingleValueEvent(new ValueEventListener() { 

Dies und vieles mehr ist in der Firebase documentation on reading data from the database erläutert.

+0

Es funktioniert nicht, triggern immer noch jedes Mal, wenn die Daten geändert werden. –

+1

Das scheint seltsam. 'addListenerForSingleValueEvent' feuert" sofort "für den aktuellen Wert und hört dann auf zu hören. Ich habe nie gesehen, dass es anders funktioniert, also ist es wahrscheinlich so, wie du es aufgebaut hast. Mit dem Code, den Sie freigegeben haben, wird der 'onDataChange' aufgerufen, wenn Sie' getUser' aufrufen. –

+0

Weil ich es nicht aufrufen will, wenn eine Taste gedrückt wird, aber nicht wenn die Datenbank geändert wird. irgendeine Idee wie kann ich umsetzen? –