【问题标题】:com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type com.test.consti.last.QuestionEntrycom.google.firebase.database.DatabaseException:无法将 java.lang.String 类型的对象转换为 com.test.consti.last.QuestionEntry 类型
【发布时间】:2018-04-09 23:41:14
【问题描述】:

我正在构建一个社交应用程序,它将保存和检索 firebase 中的数据。但是我收到了这个错误

com.google.firebase.database.DatabaseException:无法转换对象 类型为 java.lang.String 的类型为 com.test.consti.last.QuestionEntry 在 com.google.android.gms.internal.zzear.zzb(未知来源) 在 com.google.android.gms.internal.zzear.zza(未知来源) 在 com.google.firebase.database.DataSnapshot.getValue(未知来源) 在 com.test.consti.last.FirebaseHelper.fetchData(FirebaseHelper.java:28) 在 com.test.consti.last.FirebaseHelper.access$000(FirebaseHelper.java:17) 在 com.test.consti.last.FirebaseHelper$1.onChildAdded(FirebaseHelper.java:36) 在 com.google.android.gms.internal.zzdri.zza(未知来源) 在 com.google.android.gms.internal.zzdwu.zzbvb(未知来源) 在 com.google.android.gms.internal.zzdxa.run(未知来源) 在 android.os.Handler.handleCallback(Handler.java:730) 在 android.os.Handler.dispatchMessage(Handler.java:92) 在 android.os.Looper.loop(Looper.java:176) 在 android.app.ActivityThread.main(ActivityThread.java:5419) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:525) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862) 在 dalvik.system.NativeStart.main(Native Method)

这是我的 FirebaseHelper。我要从 firebase 数据库中检索数据(只有“问题”子内容)

public class FirebaseHelper {
 DatabaseReference db;
 Boolean saved=null;
 ArrayList<QuestionEntry> questionEntries =new ArrayList<>();
public FirebaseHelper(DatabaseReference db)  {
    this.db=db;
    }
private void fetchData (DataSnapshot dataSnapshot){
questionEntries.clear();
for (DataSnapshot ds :dataSnapshot.getChildren()){
//There is the error
    QuestionEntry questionEntry = ds.getValue(QuestionEntry.class);
    questionEntries.add(questionEntry);
}
}
public ArrayList<QuestionEntry> retreive (){
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 questionEntries;
}

那么这是 QuestionEntry

public class QuestionEntry {
public String question_title;

public String question_id;
public   String tag_id;
public   String tag_name;
public   String question_content;
public String question_date;
public    String question_username;
public String interet;


public QuestionEntry(){

}

public void setQuestion_title(String question_title) {
    this.question_title = question_title;
}

public void setQuestion_id(String question_id) {
    this.question_id = question_id;
}

public void setTag_id(String tag_id) {
    this.tag_id = tag_id;
}

public void setTag_name(String tag_name) {
    this.tag_name = tag_name;
}

public void setQuestion_content(String question_content) {
    this.question_content = question_content;
}

public void setQuestion_date(String question_date) {
    this.question_date = question_date;
}

public void setQuestion_username(String question_username) {
    this.question_username = question_username;
}

public void setInteret(String interet) {
    this.interet = interet;
}

public String getQuestion_title() {
    return question_title;
}

public String getQuestion_id() {
    return question_id;
}

public String getTag_id() {
    return tag_id;
}

public String getTag_name() {
    return tag_name;
}

public String getQuestion_content() {
    return question_content;
}



public String getQuestion_username() {
    return question_username;
}

public String getInteret() {
    return interet;
}

public String getQuestion_date() {
    return question_date;
}
}

this is my firebase database structure 这是我的活动

这是我的活动

    public class Actu extends Fragment {
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        v = inflater.inflate(R.layout.activity_actu, container, false);
        lv = (ListView) v.findViewById(R.id.actu_rv);
        db = FirebaseDatabase.getInstance().getReference("Questions");
        helper = new FirebaseHelper(db);
        adapter = new QuestionAdapter(getContext(),helper.retreive());
        lv.setAdapter(adapter);


        return v;        }
}

我已经将内容发布到 firebase

【问题讨论】:

    标签: java android firebase firebase-realtime-database


    【解决方案1】:

    fetchData方法改成这样:

    private void fetchData (DataSnapshot dataSnapshot){
    questionEntries.clear();
    QuestionEntry questionEntry = dataSnapshot.getValue(QuestionEntry.class);
    questionEntries.add(questionEntry);
     }
    

    for 循环正在循环通过节点 questions 的子节点,并且由于子节点包含字符串,您会收到该错误。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-19
    • 2020-08-17
    • 2021-05-02
    • 2020-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多