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;
}