Java 从Firebase获取数据时,RecyclerView不工作

Java 从Firebase获取数据时,RecyclerView不工作,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,从Firebase获取数据时,RecyclerView不工作。Android监视器说问题出在firebaseheloper.java中的fetchData()函数中 FirebaseHelper.java public class FirebaseHelper { DatabaseReference db; ArrayList<SaveData> sd=new ArrayList<>(); //pass database reference public Firebas

Firebase
获取数据时,
RecyclerView
不工作。Android监视器说问题出在firebaseheloper.java中的
fetchData()
函数中

FirebaseHelper.java

public class FirebaseHelper {
DatabaseReference db;
ArrayList<SaveData> sd=new ArrayList<>();

//pass database reference
public FirebaseHelper(DatabaseReference db){
    this.db=db;
}

//read by hooking onto database operation callbacks
public ArrayList<SaveData>retrieve(){
    db.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            fetchData(dataSnapshot);
        }

        @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) {

        }
    });
    return sd;
}

//implement fetch data and fill arraylist

public void fetchData(DataSnapshot dataSnapshot){
    sd.clear();
    for(DataSnapshot ds : dataSnapshot.getChildren()){
        SaveData saves=ds.getValue(SaveData.class);
        sd.add(saves);
    }
}
错误如下

Process: nutritionapp.listview.bio.ayushsharma.nutritionapp, PID: 3105

com.google.firebase.database.DatabaseException: Can't convert object of type 
java.lang.String to type Model.SaveData

at com.google.android.gms.internal.zzbqi.zze(Unknown Source)

at com.google.android.gms.internal.zzbqi.zzb(Unknown Source)

at com.google.android.gms.internal.zzbqi.zza(Unknown Source)

at com.google.firebase.database.DataSnapshot.getValue(Unknown Source)

at data.FirebaseHelper.fetchData(FirebaseHelper.java:61)

at data.FirebaseHelper$1.onChildAdded(FirebaseHelper.java:30)

at com.google.android.gms.internal.zzblz.zza(Unknown Source)

at com.google.android.gms.internal.zzbnz.zzYj(Unknown Source)

at com.google.android.gms.internal.zzboc$1.run(Unknown Source)

at android.os.Handler.handleCallback(Handler.java:739)

at android.os.Handler.dispatchMessage(Handler.java:95)

at android.os.Looper.loop(Looper.java:148)

at android.app.ActivityThread.main(ActivityThread.java:5582)

at java.lang.reflect.Method.invoke(Native Method)

at 


com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

您正在以错误的方式从快照中检索数据。试试这个

public ArrayList<SaveData>retrieve(){
  sd.clear();
  db.addChildEventListener(new ChildEventListener() {
    @Override
    public void onChildAdded(DataSnapshot dataSnapshot, String s) {
        SaveData saves=dataSnapshot.getValue(SaveData.class);
        sd.add(saves);
    }

    @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) {

    }
});
return sd;
}
public arraylisterrieve(){
sd.clear();
db.addChildEventListener(新的ChildEventListener(){
@凌驾
公共void onChildAdded(DataSnapshot DataSnapshot,字符串s){
SaveData saves=dataSnapshot.getValue(SaveData.class);
sd.添加(保存);
}
@凌驾
公共void onChildChanged(DataSnapshot DataSnapshot,字符串s){
}
@凌驾
ChildRemoved上的公共void(DataSnapshot DataSnapshot){
}
@凌驾
已移动ChildMoved上的公共void(DataSnapshot DataSnapshot,字符串s){
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
返回sd;
}

我希望这能有所帮助。

@i\m\u mahii:请不要使用引用设备来引用引入代码材料的文件名。它们实际上不是引用。普通的段落文本就可以了。
Process: nutritionapp.listview.bio.ayushsharma.nutritionapp, PID: 3105

com.google.firebase.database.DatabaseException: Can't convert object of type 
java.lang.String to type Model.SaveData

at com.google.android.gms.internal.zzbqi.zze(Unknown Source)

at com.google.android.gms.internal.zzbqi.zzb(Unknown Source)

at com.google.android.gms.internal.zzbqi.zza(Unknown Source)

at com.google.firebase.database.DataSnapshot.getValue(Unknown Source)

at data.FirebaseHelper.fetchData(FirebaseHelper.java:61)

at data.FirebaseHelper$1.onChildAdded(FirebaseHelper.java:30)

at com.google.android.gms.internal.zzblz.zza(Unknown Source)

at com.google.android.gms.internal.zzbnz.zzYj(Unknown Source)

at com.google.android.gms.internal.zzboc$1.run(Unknown Source)

at android.os.Handler.handleCallback(Handler.java:739)

at android.os.Handler.dispatchMessage(Handler.java:95)

at android.os.Looper.loop(Looper.java:148)

at android.app.ActivityThread.main(ActivityThread.java:5582)

at java.lang.reflect.Method.invoke(Native Method)

at 


com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
public ArrayList<SaveData>retrieve(){
  sd.clear();
  db.addChildEventListener(new ChildEventListener() {
    @Override
    public void onChildAdded(DataSnapshot dataSnapshot, String s) {
        SaveData saves=dataSnapshot.getValue(SaveData.class);
        sd.add(saves);
    }

    @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) {

    }
});
return sd;
}