2016-09-17 4 views
0
n = ref.child(key).child("customer"); 

n.addChildEventListener(new ChildEventListener() { 
    @Override 
    public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
     getData(dataSnapshot); 
    } 

    @Override 
    public void onChildChanged(DataSnapshot dataSnapshot, String s) { 
     getData(dataSnapshot); 
    } 

    public void onChildRemoved(DataSnapshot dataSnapshot) { } 
    public void onChildMoved(DataSnapshot dataSnapshot, String s) { } 
    public void onCancelled(FirebaseError firebaseError) { } 
}); 

Und die getData Funktion sieht wie folgt aus.Firebase Listview

private void getData(DataSnapshot ds){ 
    arrayList.clear(); 
    for(DataSnapshot data:ds.getChildren()){ 
    People p = new People(); 
    p.setName(data.getValue(People.class).getName()); 
    arrayList.add(p.getName()); 
    } 

    if(arrayList.size()>0){ 
    ArrayAdapter a = new ArrayAdapter(MainActivity.this,android.R.layout.simple_list_item_1,arrayList); 
    listview.setAdapter(a); 
    } 
} 

Es zeigt

Unfortunate Fehler und Schließen des Programms (App abstürzt)

Wo habe ich falsch gemacht? Unter dem Kundenschlüssel gibt es eine Anzahl von eindeutigen Schlüsseln, die durch Drücken erzeugt werden, ich möchte die inneren Daten (Namen) in ListView bekommen.

Hier ist mein logcat

PID: 2906 com.firebase.client.FirebaseException: Failed to bounce to type at com.firebase.client.DataSnapshot.getValue(DataSnapshot.java:‌​185 at com.example.ahmedimam.firebase2.MainActivity.getData(MainAct‌​ivity.java:151) 

MainActivity 151 Punkte, um

p.setName(data.getValue(People.class).getName()); 

Wenn ich es p.setName(data.getValue().toString); ändern - seine Arbeits aber es zeigt die zuletzt hinzugefügten Schlüssel mit vollen Kindern und ich möchte bekommen Nur der Name jedes automatisch generierten Schlüssels.

+0

Die Gemeinde diskutierte kürzlich [das Hinzufügen von dringendem Bitten zu Fragen] (http://meta.stackoverflow.com/q/326569/472495) und entschied, dass sie Beiträge ohne solche Anfragen bevorzugt. – halfer

+0

Was ist der Fehler, den Sie bekommen? –

+0

PID: 2906 com.firebase.client.FirebaseException: Fehler beim Springen auf den Typ unter com.firebase.client.DataSnapshot.getValue (DataSnapshot.java:185 unter com.example.ahmedimam.firebase2.MainActivity.getData (MainActivity.java : 151) –

Antwort

0

Dies ist ein korrekter & getesteter Code zum Anzeigen von Firebase childre n in einer Listenansicht ...

public class MainActivity extends AppCompatActivity { 
ListView mListView; 
private ArrayList<String> mArraylistSectionLessons = new ArrayList<>(); 
public static String clickedItem; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    FirebaseDatabase database = FirebaseDatabase.getInstance(); 
    DatabaseReference myRef = database.getReference("Users"); 

    // List Views 
    mListView = (ListView) findViewById(R.id.listView); 
    final ArrayAdapter<String> arrayAdapterLessons = new ArrayAdapter<String>(this, R.layout.list_view, 
      R.id.label, mArraylistSectionLessons); 
    mListView.setAdapter(arrayAdapterLessons); 

    // Getting All Keys From Firebase Query 
    myRef.addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 

      for (DataSnapshot child : dataSnapshot.getChildren()) { 

       String value = child.getKey(); 
       mArraylistSectionLessons.add(value); 
       arrayAdapterLessons.notifyDataSetChanged(); 

      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 
     } 

    }); 
    // listening to single list item on click 
    mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View view, 
           int position, long id) { 

      clickedItem =(String) (mListView.getItemAtPosition(position)); 
      // Launching new Activity on selecting single List Item 
      Intent i = new Intent(getApplicationContext(), SecondActivity.class); 


      // sending data to new activity 
      i.putExtra(clickedItem, clickedItem); 

      startActivity(i); 
     } 
    }); 
} 

}

Ressourcen: "Master Android" Application

+0

Diese Antwort beantwortet vielleicht die Frage, aber das ist eher wie eine generische Antwort für das Abrufen von Daten aus der Firebase-Datenbank. –

+0

Dies ist die beste Antwort, die ich wirklich gefunden habe ... Aber für weitere Informationen können Sie sehen, die "Master Android" Anwendung, die ich fand diesen Code drin .. Danke –

0

Ihre getData Funktion sollte wie folgt aussehen.

private void getData(DataSnapshot ds){ 
    arrayList.clear(); 
    for(DataSnapshot data : ds.getChildren()){ 
    People p = new People(); 
    p = data.getValue(People.class); 

    arrayList.add(p.getName()); 
    } 

    if(arrayList.size() > 0){ 
    ArrayAdapter a = new ArrayAdapter(MainActivity.this,android.R.layout.simple_list_item_1,arrayList); 
    listview.setAdapter(a); 
    } 
} 

Nehmen Sie die Attribute Ihrer People Klasse public.

Verwandte Themen