2017-01-15 7 views
0

My Firebase und How my RecyclerView display after my codewie Abrufen von Daten zu My RecyclerView aus der Datenbank, My RecyclerView anzeigen Leere

Dies ist, wie ich meine Daten

saveBtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      firebaseAuth = FirebaseAuth.getInstance(); 
      mCurrentUser = firebaseAuth.getCurrentUser(); 
      DatabaseReference db = FirebaseDatabase.getInstance().getReference().child("Email").child(mCurrentUser.getUid()).child("Appointment").push(); 
      String name = nameTxt.getText().toString().trim(); 
      String address = addressTxt.getText().toString().trim(); 
      String tel = telTxt.getText().toString().trim(); 
      String date = dateApp.getText().toString().trim(); 
      String time = timeApp.getText().toString().trim(); 

      //Adding values 
      db.child("Name").setValue(name); 
      db.child("Address").setValue(address); 
      db.child("Tel").setValue(tel); 
      db.child("Date").setValue(date); 
      db.child("Time").setValue(time); 

      //Storing values to Firebase 
      Toast.makeText(AddAppointment.this,"Saved",Toast.LENGTH_SHORT).show(); 
      Intent mainIntent = new Intent(AddAppointment.this,Appointment.class); 
      startActivity(mainIntent); 
     } 
    }); 

Mein Code speichern Daten RecyclerView abrufen "aber keinen Erfolg"

public class ViewAppointment extends AppCompatActivity { 

    private FirebaseAuth firebaseAuth; 
    private FirebaseUser mCurrentUser; 
    private DatabaseReference db; 
    private RecyclerView recyclerView; 
    private FirebaseListAdapter<AppointmentData> mAdapter; 

    ImageButton refreshBtn; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_view_appointment); 

     recyclerView = (RecyclerView)findViewById(R.id.recycle); 
     recyclerView.setLayoutManager(new LinearLayoutManager(this)); 
     firebaseAuth = FirebaseAuth.getInstance(); 

     mCurrentUser = firebaseAuth.getCurrentUser(); 
     db = FirebaseDatabase.getInstance().getReference().child("Email").child(mCurrentUser.getUid()).child("Appointment"); 
     db.keepSynced(true); 
     addListenerOnButton(); 
     FirebaseRecyclerAdapter<AppointmentData, myViewHolder> adapter = new FirebaseRecyclerAdapter<AppointmentData, myViewHolder> 
      (AppointmentData.class,R.layout.model,myViewHolder.class,db) { 

      @Override 
      protected void populateViewHolder(myViewHolder viewHolder, AppointmentData model, int position) { 
       viewHolder.nameTxt.setText(model.getName()); 
       viewHolder.dateApp.setText(model.getDate()); 
       viewHolder.timeApp.setText(model.getTime()); 
      } 
     }; 
     recyclerView.setAdapter(adapter); 
    } 

    public static class myViewHolder extends RecyclerView.ViewHolder { 
     private TextView nameTxt,dateApp,timeApp; 

     public myViewHolder(View itemView){ 
      super(itemView); 
      nameTxt = (TextView)itemView.findViewById(R.id.nameTxt); 
      dateApp = (TextView) itemView.findViewById(R.id.dateAppointment); 
      timeApp = (TextView)itemView.findViewById(R.id.timeAppointment); 
     } 
    } 
} 

AppointmentData.java

public class AppointmentData { 

    private String name, tel, address, time, date; 

    public AppointmentData() { 

    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public void setTel(String tel) { 
     this.tel = tel; 
    } 

    public void setAddress(String address) { 
     this.address = address; 
    } 

    public void setTime(String time) { 
     this.time = time; 
    } 

    public void setDate(String date) { 
     this.date = date; 
    } 

    public AppointmentData(String name, String tel, String address, String time, String date) { 
     this.name = name; 
     this.tel = tel; 
     this.address = address; 
     this.time = time; 
     this.date = date; 
    } 

    public String getName() { 
     return name; 
    } 

    public String getTel() { 
     return tel; 
    } 

    public String getAddress() { 
     return address; 
    } 

    public String getDate() { 
     return date; 
    } 

    public String getTime() { 
     return time; 
    } 
} 

Model.xml RecyclerView Layout

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="horizontal" android:layout_width="match_parent" 
xmlns:card_view="http://schemas.android.com/apk/res-auto" 
android:layout_margin="10dp" 
card_view:cardCornerRadius="5dp" 
card_view:cardElevation="5dp" 
android:layout_height="wrap_content"> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="?android:attr/colorControlHighlight" 
    android:orientation="vertical"> 


    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:text="Name" 
     android:id="@+id/nameTxt" 
     android:padding="10dp" 
     android:textColor="@android:color/black" 
     android:textStyle="bold" 
     android:layout_alignParentLeft="true" 
     android:background="@android:color/holo_blue_light" /> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="@color/cast_intro_overlay_button_background_color"> 

     <TextView 
      android:text="Date" 
      android:layout_width="185dp" 
      android:layout_height="wrap_content" 
      android:id="@+id/dateAppointment" /> 

     <TextView 
      android:text="Time" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/timeAppointment" 
      android:layout_weight="1" /> 
    </LinearLayout> 

</LinearLayout> 

</android.support.v7.widget.CardView> 

ViewAppointment.xml

<android.support.v7.widget.RecyclerView 
    android:id="@+id/recycle" 
    android:layout_width="match_parent" 
    android:layout_height="380dp" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentStart="true" 
    android:layout_marginTop="21dp"> 

</android.support.v7.widget.RecyclerView> 
+1

Haben Sie versucht, eine statische Liste von Daten mit Ihrem RecyclerView korrekt funktioniert, bevor auch die Datenbank überprüfen zu berühren? –

+0

no ~ ich folge einfach dem Tutorial und ändere meinen Code ... aber ich weiß nicht wo Fehler –

+0

Ihr Bild zeigt zwei Karten geladen sind, so das Problem in Ihren Layouts oder wie der Text angezeigt wird –

Antwort

1

Ich denke, Ihr Problem in AppointmentData Klasse. Sie haben alle Ihre Mitgliedsvariablen in Kleinbuchstaben benannt, die nicht genau mit dem Schlüsselnamen in Ihrer Datenbank übereinstimmen (weil der erste Buchstabe jedes Schlüsselnamens in Großbuchstaben geschrieben ist). Stellen Sie also sicher, dass der Schlüsselname und die Mitgliedsvariablen Ihrer Klasse AppointmentData übereinstimmen.

0

Ich mache eine kleine Bemerkung über Ihr Problem und es scheint nur ein kleiner Fehler zu sein. Ich beziehe mich auf diesen Beitrag:

https://stackoverflow.com/a/34883389/4088357

Wir werden eine Java-Klasse erstellen, die einen Blog-Post darstellt. Wie beim letzten Mal müssen wir sicherstellen, dass unsere Feldnamen mit den Namen der Eigenschaften in der Firebase-Datenbank übereinstimmen und der Klasse einen standardmäßigen, parameterlosen Konstruktor geben.

So können Sie Ihren Code ändern, wenn Sie die Werte in Firebase-Datenbank gespeichert:

//Adding values 
db.child("name").setValue(name); 
db.child("address").setValue(address); 
db.child("tel").setValue(tel); 
db.child("date").setValue(date); 
db.child("time").setValue(time); 
+0

danke Mann, du hilfst mir sehr. Es funktioniert. Ich bin so unvorsichtig –

+0

Ich habe eine Frage. Wenn ich einen der RecyclerView und Daten von Firebase löschen möchte, wie schreibe ich den Code? –

+0

Gern geschehen @YewGuanKoh. Bitte erstellen Sie eine neue Frage für dieses Problem. –

Verwandte Themen