2017-05-07 3 views
0

Ich habe eine Anwendung mit Google Maps und Firebase-Datenbank entwickelt. Bei einem langen Druck auf die Karte speichere ich LatLng in der Firebase DB; Firebase onChildAdded() Event nicht ausgelöst manchmal/nach Leerlaufzeit

// code to save latlng to DB 
    mMap.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() { 
     @Override 
     public void onMapLongClick(LatLng latLng) { 
      mDatabaseReference.push().setValue(latLng); 
     } 
    }); 

Dies führt zu einer Firebase Trigger zu informieren, dass ein Kind Ereignis durch onChildAdded hinzugefügt wurde().

if (mChildEventListener == null) { 
    mChildEventListener = new ChildEventListener() { 
     @Override 
     public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
      String key = dataSnapshot.getKey(); 
      Log.i(TAG, "onChildAdded " + s + " @ " + key); 
     } 

     @Override 
     public void onChildChanged(DataSnapshot dataSnapshot, String s) { 
      String key = dataSnapshot.getKey(); 
      Log.i(TAG, "onChildChanged " + s + " @ " + dataSnapshot.getKey()); 
     } 

     @Override 
     public void onChildRemoved(DataSnapshot dataSnapshot) { 
      String key = dataSnapshot.getKey(); 
      Log.i(TAG, "onChildRemoved " + dataSnapshot.getKey()); 
     } 

     @Override 
     public void onChildMoved(DataSnapshot dataSnapshot, String s) { 
      String key = dataSnapshot.getKey(); 
      Log.i(TAG, "onChildMoved " + s + " @ " + key); 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 
      Log.i(TAG, "onCancelled " + databaseError.getDetails()); 
     } 
    }; 

    mDatabaseReference.addChildEventListener(mChildEventListener); 
} 

Alle beabsichtigten Code funktioniert gut. Ich habe jedoch festgestellt, dass die Child-Listener-Ereignisse (onChildAdded, onChildChanged usw.) nach einiger Leerlaufzeit nicht von der App empfangen werden. Wenn Sie lange auf die Karte drücken, werden die Koordinaten in der Firebase DB gespeichert, die ich über die Konsole überwache. Hat jemand solch ein Problem konfrontiert? Fehle ich etwas?

+0

Ich habe derzeit öffentlichen Zugang zur DB für den ursprünglichen Dev-Zweck gewährt. – Sameer

Antwort

0

Wenn Sie eine adapter verwenden, können Sie die Methode notifyDataSetChanged() verwenden, um den Adapter zu informieren, dass einige Änderungen vorgenommen wurden.

Ich hoffe, es hilft.

+0

Ich benutze keinen Adapter ab sofort. – Sameer

+0

An welcher Stelle entfernen Sie den 'EventListener'? –

+0

Ich entferne den EventListener in onStop(). – Sameer

Verwandte Themen