2015-10-01 11 views
42

Ich möchte alle Child-Liste von Firebase in Android.Wie bekomme ich alle Child-Liste von Firebase Android

Ich habe diesen Code implementiert, aber es funktioniert nicht.

mFirebaseRef = new Firebase(FIREBASE_URL); 

mFirebaseRef.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     List<String> td = (ArrayList<String>) dataSnapshot.getValue(); 
     //notifyDataSetChanged(); 
    } 

    @Override 
    public void onCancelled(FirebaseError firebaseError) { 

    } 
}); 
+0

Mögliche doppelte SubChild haben: http://stackoverflow.com/questions/27848313/firebase-retrieve-child-android –

+1

eigene Antwort. Aber es ist teilweise eine Vermutung, weil "es nicht funktioniert" ist unglaublich vage und Sie enthalten kein Schnipsel Ihrer Daten. Wenn meine Antwort nicht auf Ihr Problem eingeht: Welchen Fehler bekommen Sie? Wie sehen Ihre Daten aus (ein Copy/Paste-Beispiel, keine Screenshots und keine Beschreibungen)? –

+0

Versuchen Sie Folgendes: http://stackoverflow.com/questions/32886546/how-to-get-all-child-list-from-firebase-android/36600791#36600791 –

Antwort

27

Firebase speichert eine Folge von Werten in diesem Format:

"-K-Y_Rhyxy9kfzIWw7Jq": "Value 1" 
"-K-Y_RqDV_zbNLPJYnOA": "Value 2" 
"-K-Y_SBoKvx6gAabUPDK": "Value 3" 

Wenn das ist, wie Sie sie haben, haben Sie die falsche Art zu bekommen. Die obige Struktur ist als Map dargestellt, nicht als List:

mFirebaseRef = new Firebase(FIREBASE_URL); 

mFirebaseRef.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     Map<String, Object> td = (HashMap<String,Object>) dataSnapshot.getValue(); 

     List<Object> values = td.values(); 

     //notifyDataSetChanged(); 
    } 

    @Override 
    public void onCancelled(FirebaseError firebaseError) { 

    } 
}); 
+0

Ich möchte Elternliste von "-K-Y_Rhyxy9kfzIWw7Jq": "Wert 1" "-K-Y_RqDV_zbNLPJYnOA": "Wert 2" "-K-Y_SBoKvx6gAabUPDK": "Wert 3" –

+0

Ist es in Ordnung, 'Map = (HashMap ) dataSnapshot.getValue(); 'oder muss ich Object in MyDataObject konvertieren? –

+0

@Frank, Android-Studio zeigt rote Unterstreichung in dieser Zeile Liste Werte = td.values ​​(); ... FEHLER: - kann das Objekt Sammlung nicht zum Auflisten von Objekt..Transfer Fehler in Stacktrace .. –

64

ich unten Code hoffen arbeitet

Firebase ref = new Firebase(FIREBASE_URL); 

    ref.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot snapshot) { 
      Log.e("Count " ,""+snapshot.getChildrenCount()); 
      for (DataSnapshot postSnapshot: snapshot.getChildren()) { 
      <YourClass> post = postSnapshot.getValue(<YourClass>.class); 
      Log.e("Get Data", post.<YourMethod>()); 
      } 
     } 
     @Override 
     public void onCancelled(FirebaseError firebaseError) { 
      Log.e("The read failed: " ,firebaseError.getMessage()); 
     } 
    }); 
+4

Wenn ich das Protokoll drucke, ist es null. Kannst du mir helfen? –

+0

speicherte meinen Tag. vielen Dank! –

+0

Können Sie bitte die Daten in der Baumstruktur posten Ich bin fest auf diesem .. –

4

Speicher und retriving Daten - von der Firebase (veraltet ver 2.4.2)

Firebase fb_parent = new Firebase("YOUR-FIREBASE-URL/"); 
Firebase fb_to_read = fb_parent.child("students/names"); 
Firebase fb_put_child = fb_to_read.push(); // REMEMBER THIS FOR PUSH METHOD 

//INSERT DATA TO STUDENT - NAMES I Use Push Method 
fb_put_child.setValue("Zacharia"); //OR fb_put_child.setValue(YOUR MODEL) 
fb_put_child.setValue("Joseph"); //OR fb_put_child.setValue(YOUR MODEL) 
fb_put_child.setValue("bla blaaa"); //OR fb_put_child.setValue(YOUR MODEL) 

//GET DATA FROM FIREBASE INTO ARRAYLIST 
fb_to_read.addValuesEventListener....{ 
    public void onDataChange(DataSnapshot result){ 
     List<String> lst = new ArrayList<String>(); // Result will be holded Here 
     for(DataSnapshot dsp : result.getChildren()){ 
      lst.add(String.valueOf(dsp.getKey())); //add result into array list 
     } 
     //NOW YOU HAVE ARRAYLIST WHICH HOLD RESULTS 




for(String data:lst){ 
     Toast.make(context,data,Toast.LONG_LENGTH).show; 
     } 
    } 
} 
9

ich habe so etwas wie dies:

Firebase ref = new Firebase(FIREBASE_URL); 
ref.addValueEventListener(new ValueEventListener() { 

@Override 
public void onDataChange(DataSnapshot snapshot) { 
    Map<String, Object> objectMap = (HashMap<String, Object>)  
      dataSnapshot.getValue(); 
    List<Match> = new ArrayList<Match>(); 
    for (Object obj : objectMap.values()) { 
     if (obj instanceof Map) { 
      Map<String, Object> mapObj = (Map<String, Object>) obj; 
      Match match = new Match(); 
      match.setSport((String) mapObj.get(Constants.SPORT)); 
      match.setPlayingWith((String) mapObj.get(Constants.PLAYER)); 
      list.add(match); 
     } 
    } 
    } 
    @Override 
    public void onCancelled(FirebaseError firebaseError) { 

    } 
}); 
+0

das hat mir wirklich geholfen, danke! – JozeRi

+0

Sie sind herzlich willkommen @JozeRi :) – ruchita

+1

Bin ich Verständnis richtig? Sie wiederholen jedes Mal, wenn Sie nur einen Wert für den Übereinstimmungstyp hinzufügen? – MeLine

17
FirebaseDatabase mFirebaseDatabase = FirebaseDatabase.getInstance(); 
DatabaseReference databaseReference = mFirebaseDatabase.getReference(FIREBASE_URL); 
     databaseReference.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 

       for (DataSnapshot childDataSnapshot : dataSnapshot.getChildren()) { 
        Log.v(TAG,""+ childDataSnapshot.getKey()); //displays the key for the node 
        Log.v(TAG,""+ childDataSnapshot.child(--ENTER THE KEY NAME eg. firstname or email etc.--).getValue()); //gives the value for given keyname 
       } 
      } 
     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 

Hoffe es hilft!

3

In meinem Fall funktionierte nur gegebene Lösung gut.

Screenshot von Firebase Arraystruktur:

enter image description here

Wie ganze Liste von Firebase von DataSnapshot zu holen.

GenericTypeIndicator<Map<String, List<Education>>> genericTypeIndicator = new GenericTypeIndicator<Map<String, List<Education>>>() {}; 
Map<String, List<Education>> hashMap = dataSnapshot.getValue(genericTypeIndicator); 

for (Map.Entry<String,List<Education>> entry : hashMap.entrySet()) { 
     List<Education> educations = entry.getValue(); 
     for (Education education: educations){ 
      Log.i(TAG, education.Degree); 
     } 
} 

Education.java: (Model-Klasse).

public class Education implements Serializable{ 

    public String Degree; 
    public String Result; 
} 

Ich hoffe, das würde gut funktionieren.

7

wie Frank sagte Firebase speichert Folge von Werten im Format von "key": "Value" , die eine Karte Struktur

Liste aus dieser Sequenz, die Sie

haben, um
  1. initialisieren GenericTypeIndicator mit HashMap von String und Ihre Objekt.
  2. bekommen Wert von DataSnapShot als GenericTypeIndicator in Karte.
  3. initialisieren ArrayList mit HashMap Werte.

GenericTypeIndicator<HashMap<String, Object>> objectsGTypeInd = new GenericTypeIndicator<HashMap<String, Object>>() {}; 
Map<String, Object> objectHashMap = dataSnapShot.getValue(objectsGTypeInd); 
ArrayList<Object> objectArrayList = new ArrayList<Object>(objectHashMap.values()); 

funktioniert gut für mich, hoffen, dass es hilft.

0
mDatabase.child("token").addListenerForSingleValueEvent(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       for (DataSnapshot snapshot:dataSnapshot.getChildren()) 
       { 
       String key= snapshot.getKey(); 
       String value=snapshot.getValue().toString(); 
       } 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 
       Toast.makeText(ListUser.this,databaseError.toString(),Toast.LENGTH_SHORT).show(); 
      } 
     }); 

funktioniert nur, wenn Kind keine

enter image description here

+0

** Dies wird für das einmalige Lesen von bestimmten Formiaten verwendet ** –

Verwandte Themen