Il recupero di dati da Firebase Android Studio

Struttura del mio Firebase Datebase sembra che:

Il recupero di dati da Firebase Android Studio

Voglio recuperare i dati da esso, in modo che quando cambio il valore di “Nome” in database sarà immediatamente cambiare in Android Studio. Ora, io uso .addChildEventListner metodo combinato con Map<String, String>. Qualcuno potrebbe aiutarmi ?

Edit: il Mio codice:

   Firebase markerRef = myFirebaseRef.child("marker");

    markerRef.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(com.firebase.client.DataSnapshot dataSnapshot, String s) {
            Map<String, String> map = dataSnapshot.getValue(Map.class);
            double latitude = Double.parseDouble(map.get("Lat"));
            double longitude = Double.parseDouble(map.get("Lon"));
            LatLng location = new LatLng(latitude, longitude);

            String filename = map.get("Name");
            String[] splitString = filename.split(",");


            mMap.addMarker(new MarkerOptions()
                    .position(location)
                    .title(splitString[0])
                    .snippet(splitString[1])
                    .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
        }

        @Override
        public void onChildChanged(com.firebase.client.DataSnapshot dataSnapshot, String s) {


        }

        @Override
        public void onChildRemoved(com.firebase.client.DataSnapshot dataSnapshot) {

        }

        @Override
        public void onChildMoved(com.firebase.client.DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {

        }
    });
  • vedi il codice, non possiamo aiutarvi, senza di essa
  • Ho aggiunto il codice.
InformationsquelleAutor mzmyslowski | 2016-07-25



2 Replies
  1. 2

    Nella tua attività crea vuoto HashMap
    Hasmap<String, Marker> markers = new Hashmap<>();
    Quindi in onChildAdded

    Marker m = mMap.addMarker(new MarkerOptions()
                            .position(location)
                            .title(splitString[0])
                            .snippet(splitString[1])
                            .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
    markers.add.put(dataSnapshot.getKey(), m);

    E in onChildChanged

    Marker m = markers.get(dataSnapshot.getKey());
    m.setPosition(newLocation);
    //And anything else, that changing

    E, infine, in onChildRemoved

    markers.get(dataSnapshot.getKey()).remove();
    markers.remove(dataSnapshot.getKey());
    • Vi ringrazio molto. Tutto funziona alla grande. 🙂
    • grazie per aver accettato, ho finalmente possibile impostare taglia per la mia domanda 😀
  2. 1

    Firebase dati recuperati dal collegamento di un asincrono ascoltatore un FirebaseDatabase di riferimento. L’ascoltatore viene attivato una volta per lo stato iniziale dei dati e di nuovo in qualsiasi momento la modifica dei dati.

    private DatabaseReference mDatabase;
    mDatabase = FirebaseDatabase.getInstance().getReference();

    Per aggiungere un valore listener di eventi, utilizzare il addValueEventListener() o addListenerForSingleValueEvent() metodo. Per aggiungere un bambino listener di eventi, utilizzare il addChildEventListener() metodo.

    È possibile utilizzare il onDataChange() metodo per leggere un istantanea statica dei contenuti di un determinato percorso, esistenti al momento dell’evento. Questo metodo viene attivato una volta quando l’ascoltatore è collegato e ogni volta i dati, compresi i bambini, i cambiamenti. L’evento di callback è passata un’istantanea contenente tutti i dati in tale posizione, compreso il figlio di dati. Se non ci sono dati, l’istantanea restituito è null.

    Esempio :-

     ValueEventListener postListener = new ValueEventListener() {
     @Override
     public void onDataChange(DataSnapshot dataSnapshot) {
        //Get Post object and use the values to update the UI
        Post post = dataSnapshot.getValue(Post.class);
        //...
     }
    
     @Override
     public void onCancelled(DatabaseError databaseError) {
        //Getting Post failed, log a message
        Log.w(TAG, "loadPost:onCancelled", databaseError.toException());
        //...
     }
     };
     mPostReference.addValueEventListener(postListener);

    Bambino eventi vengono attivati in risposta a specifiche operazioni che avvengono per i figli di un nodo da un’operazione come quella di un bambino aggiunto attraverso il metodo push() o un bambino che sta per essere aggiornati attraverso la updateChildren() metodo. Ognuno di questi insieme e può essere utile per ascoltare le modifiche a un nodo specifico in un database.

    Esempio :-

    ChildEventListener childEventListener = new ChildEventListener() {
    @Override
    public void onChildAdded(DataSnapshot dataSnapshot, String     previousChildName) {
        Log.d(TAG, "onChildAdded:" + dataSnapshot.getKey());
    
        //A new comment has been added, add it to the displayed list
        Comment comment = dataSnapshot.getValue(Comment.class);
    
        //...
     }
    
     @Override
     public void onChildChanged(DataSnapshot dataSnapshot, String previousChildName) {
        Log.d(TAG, "onChildChanged:" + dataSnapshot.getKey());
    
        //A comment has changed, use the key to determine if we are displaying this
        //comment and if so displayed the changed comment.
        Comment newComment = dataSnapshot.getValue(Comment.class);
        String commentKey = dataSnapshot.getKey();
    
        //...
     }
    
     @Override
     public void onChildRemoved(DataSnapshot dataSnapshot) {
        Log.d(TAG, "onChildRemoved:" + dataSnapshot.getKey());
    
        //A comment has changed, use the key to determine if we are displaying this
        //comment and if so remove it.
        String commentKey = dataSnapshot.getKey();
    
        //...
    }
    
    @Override
    public void onChildMoved(DataSnapshot dataSnapshot, String previousChildName) {
        Log.d(TAG, "onChildMoved:" + dataSnapshot.getKey());
    
        //A comment has changed position, use the key to determine if we are
        //displaying this comment and if so move it.
        Comment movedComment = dataSnapshot.getValue(Comment.class);
        String commentKey = dataSnapshot.getKey();
    
        //...
    }
    
    @Override
    public void onCancelled(DatabaseError databaseError) {
        Log.w(TAG, "postComments:onCancelled", databaseError.toException());
        Toast.makeText(mContext, "Failed to load comments.",
                Toast.LENGTH_SHORT).show();
    }
    };
    ref.addChildEventListener(childEventListener); 

    In alcuni casi può essere utile una funzione di callback per essere chiamato una volta e poi subito rimosso, come durante l’inizializzazione di un elemento dell’interfaccia utente che non si aspetta di cambiare. È possibile utilizzare il addListenerForSingleValueEvent() metodo per semplificare questo scenario: si innesca una volta e poi non fa scattare di nuovo.

    Questo è utile per i dati che ha solo bisogno di essere caricato una volta e non è previsto il cambio di frequente o che richiedono un ascolto attivo. Per esempio,

    Esempio:-

    final String userId = getUid();
    mDatabase.child("users").child(userId).addListenerForSingleValueEvent(
        new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                //Get user value
                User user = dataSnapshot.getValue(User.class);
    
                //...
            }
    
            @Override
            public void onCancelled(DatabaseError databaseError) {
                Log.w(TAG, "getUser:onCancelled", databaseError.toException());
            }
        });

Lascia un commento