Моя проблема в том, что у меня есть база данных в Firebase, где я храню объекты "День",
и я хочу получить все содержимое базы данных и поместить все в ArrayList дней, НО, когда я выполняю код, чтобы сделать это, у меня появляется ошибка: «Не удается преобразовать объект типа java.lang.String в тип com .example.android_project_test.Day ", и я понятия не имею, как ее решить.
Я пытался разыграть его, но это не сработало.
Сообщение:
2019-04-20 17:52:18.158 12477-12477/com.example.android_project_test E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.android_project_test, PID: 12477
com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type com.example.android_project_test.Day
at com.google.android.gms.internal.firebase_database.zzkt.zzb(Unknown Source:209)
at com.google.android.gms.internal.firebase_database.zzkt.zza(Unknown Source:0)
at com.google.firebase.database.DataSnapshot.getValue(Unknown Source:10)
at com.example.android_project_test.CalendarDbHelper.fetchData(CalendarDbHelper.java:125)
at com.example.android_project_test.CalendarDbHelper.access$000(CalendarDbHelper.java:12)
at com.example.android_project_test.CalendarDbHelper$1.onChildAdded(CalendarDbHelper.java:58)
at com.google.android.gms.internal.firebase_database.zzbt.zza(Unknown Source:71)
at com.google.android.gms.internal.firebase_database.zzgx.zzdr(Unknown Source:2)
at com.google.android.gms.internal.firebase_database.zzhd.run(Unknown Source:71)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
Вот мой дневной класс:
public class Day {
private String id;
private String dayName;
private String dayDate;
private ArrayList<Meal> meals;
Day(){}
Day(String id, String dayName, String dayDate, ArrayList<Meal> meals) {
this.id = id;
this.dayName = dayName;
this.dayDate = dayDate;
this.meals = meals;
}
Day(String dayName, String dayDate, ArrayList<Meal> meals) {
this.dayName = dayName;
this.dayDate = dayDate;
this.meals = meals;
}
Day(String dayName, String dayDate) {
this.dayName = dayName;
this.dayDate = dayDate;
}
Вот как я добавляю Days в базу данных:
public void addDay(Day day)
{
String Id = db.push().getKey();
day.setId(Id);
db.child(Id).setValue(day);
}
Вот метод, который я использую для получения ArrayList из базы данных:
public ArrayList<Day> listDays()
{
db.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
fetchData(dataSnapshot);
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
fetchData(dataSnapshot);
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
return listDays;
}
Вот fetchData (dataSnapshot), где у меня проблема:
private void fetchData(DataSnapshot dataSnapshot)
{
for(DataSnapshot postSnapShot:dataSnapshot.getChildren())
{
Day day= postSnapShot.getValue(Day.class);
listDays.add(day);
}
}
Когда я хочу сделать «Day day = postSnapShot.getValue (Day.class);», я хочу получить каждого ребенка как объект Day. Но то, что я получаю, это сообщение, которое я написал выше.