Dies ist mein Code:Lesefirebase-Datenbank und anzeigen In RecyclerView: Android
Liste.java Datei:
public class Liste extends AppCompatActivity{
RecyclerView myRecyclerview;
MyAdapter adapter;
List<Dentist> listDentist;
FirebaseDatabase FDB;
DatabaseReference DBR;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate (savedInstanceState);
setContentView (R.layout.activity_liste);
myRecyclerview = (RecyclerView) findViewById (R.id.myRecycler);
RecyclerView.LayoutManager LM = new LinearLayoutManager (getApplicationContext());
myRecyclerview.setLayoutManager (LM);
myRecyclerview.setItemAnimator (new DefaultItemAnimator());
myRecyclerview.addItemDecoration (new DividerItemDecoration (getApplicationContext(),LinearLayoutManager.VERTICAL));
listDentist = new ArrayList<> ();
adapter = new MyAdapter (listDentist);
FDB= FirebaseDatabase.getInstance();
GetDataFirebase();
void GetDataFirebase(){
DBR = FDB.getReference ("dentistes");
DBR.addChildEventListener (new ChildEventListener () {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
Dentist data = dataSnapshot.getValue (Dentist.class);
//Add to Arraylist
listDentist.add (data);
//Add list into adapter
myRecyclerview.setAdapter (adapter);
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder>{
List<Dentist> listArray;
public MyAdapter (List<Dentist> List){
this.listArray = List;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from (parent.getContext()).inflate (R.layout.itemview,parent,false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
Dentist data = listArray.get (position);
holder.MyText.setText (data.getName());
}
public class MyViewHolder extends RecyclerView.ViewHolder{
TextView MyText;
public MyViewHolder(View itemView) {
super (itemView);
MyText = (TextView)itemView.findViewById (R.id.textview_dentist);
}
}
@Override
public int getItemCount() {
return listArray.size();
}
}
}
activity_liste.xml Datei
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/myRecycler">
</android.support.v7.widget.RecyclerView>
</LinearLayout>
iteview .xml-Datei
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textview_dentist"
android:layout_marginBottom="15dp"
android:layout_marginTop="15dp"
android:layout_marginLeft="15dp"
android:textSize="20sp"/>
</LinearLayout>
Meine Klasse Modell:
public class Dentist {
private String Name;
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
}
Ich habe zwei Fragen:
Die Liste der Zahnärzte richtig in meinem Recyclerview angezeigt, aber die logcat zeigt mir "E/RecyclerView : Kein Adapter angeschlossen; Layout überspringen ": wie kann ich das korrigieren?
Wenn ich die Struktur meines Klassenmodells ändere: zum Beispiel füge ich Adresse und TelNumber hinzu: wie ich meinen Code ändern sollte, um foreach Zahnarzt in meinem Recyclerview seinen Namen anzuzeigen , Adresse und NumTel
1- Die Meldung „E/RecyclerView: Kein Adapter angeschlossen, das Überspringen Layout“ wird immer in dem Protokoll Katze angezeigt. 2- Ich weiß, dass ich diese privaten Felder der Zahnarzt-Klasse hinzufügen sollte, aber ich bin blockiert, wie ich den Code in der Liste.java-Datei ändern sollte. – Nesrine
Stellen Sie sicher, dass Sie diese Anweisung aus dem Thread "main" in der onChildAdded() -Methode aufrufen. Und da ist der einzige Ort, an dem du das tust. Deklarieren Sie auch die 'myRecyclerview' in dieser Methode. Funktioniert es jetzt? –
Die Liste der Zahnärzte richtig in meinem Recyclerview angezeigt, aber die logcat zeigt diesen Fehler wieder: aber es ist kein Problem. Ich brauche eine Antwort für meine zweite Frage. – Nesrine