【问题标题】:How to retrieve firebase data and create custom object如何检索 Firebase 数据并创建自定义对象
【发布时间】:2022-01-05 02:32:14
【问题描述】:

当从我的数据库中删除 cmets 部分时,我有一个正在工作的类对象。当 cmets 在那里时,出现此错误“com.google.firebase.database.DatabaseException:无法将 java.util.HashMap 类型的值转换为字符串”。

我的问题是如何更改我的自定义类以能够处理这些数据。 我可以创建新的评论类并在我的景点对象中使用评论对象吗?

package com.example.androidproject;

import android.os.Parcel;
import android.os.Parcelable;

public class attraction implements Parcelable {
private String name;
private String latitude;
private String longitude;
private String rate;
private String totalVisiting;
private String imgSrc;
private String dateOfAdd;
private String createdBy;

public attraction() {
    // Default constructor required for calls to DataSnapshot.getValue(User.class)
}

public attraction(String name, String latitude, String longitude, int rate, int totalVisitors, 
String imgSrc,String createdBy) {
    // Default constructor required for calls to DataSnapshot.getValue(User.class)
    this.name = name;
}

protected attraction(Parcel in) { 
name = in.readString();
    latitude = in.readString();
    longitude = in.readString();
    rate = in.readString();
    totalVisiting = in.readString();
    imgSrc = in.readString();
    dateOfAdd = in.readString();
    createdBy = in.readString();

}

public static final Creator<attraction> CREATOR = new Creator<attraction>() {
    @Override
    public attraction createFromParcel(Parcel in) {
        return new attraction(in);
    }

    @Override
    public attraction[] newArray(int size) {
        return new attraction[size];
    }
};

public String getName(){
    return name;
}
public void setName(String name){
    this.name = name;
}
public String getLatitude(){
    return latitude;
}
public void setLatitude(String latitude){
    this.latitude = latitude;
}
public String getLongitude(){
    return longitude;
}
public void setLongitude(String longitude){
    this.longitude = longitude;
}
public String getRate(){
    return rate;
}
public void setRate(String rate){
    this.rate = rate;
}
public String getTotalVisiting(){
    return totalVisiting;
}
public void setTotalVisitors(String totalVisiting){
    this.totalVisiting = totalVisiting;
}
public String getImgSrc(){
    return imgSrc;
}
public void setImgSrc(String imgSrc){
    this.imgSrc = imgSrc;
}
public String getDateOfAdd(){
    return dateOfAdd;
}
public void setDateOfAdd(String dateOfAdd){
    this.dateOfAdd = dateOfAdd;
}
public String getCreatedBy(){
    return createdBy;
}
public void setCreatedBy(String createdBy){
    this.createdBy = createdBy;
}


@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(name);
    dest.writeString(latitude);
    dest.writeString(longitude);
    dest.writeString(rate);
    dest.writeString(totalVisiting);
    dest.writeString(imgSrc);
    dest.writeString(dateOfAdd);
    dest.writeString(createdBy);
  

这是我从数据库创建对象的地方

private void initializeListView() {
    atr = new ArrayAdapter<>(this, R.layout.custom, atrList);
    AttractionAdapter placeAdapter = new AttractionAdapter(this, atrList);
    setContentView(R.layout.activity_non_user);
    coursesLV = findViewById(R.id.idLVCourses);
    ListView listView = (ListView) findViewById(R.id.idLVCourses);

     firebaseAttraction = FirebaseDatabase.getInstance().getReference().child("attractions");


    firebaseAttraction.addValueEventListener(new ValueEventListener() {

        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            for (DataSnapshot s : snapshot.getChildren()) {
                placeAdapter.add(a);
                setLocation(placeAdapter);

            }
        }

在代码中,firebase 中没有 cmets 部分的情况下一切正常,但我想检索一个景点的所有数据并创建一个对象。

【问题讨论】:

    标签: java android firebase


    【解决方案1】:

    为了读取 cmets 的值,您需要在名为“cmets”的吸引力类中声明一个新变量,其类型将是具有两个名为“Image”和“text”的字符串变量的新类,确保将变量声明为public 或者你也可以提供 getter 和 setter。所以最终的变化是:

    public class ClassName{
        public String Image
        public String text
        ..constructor...
    }
    

    并在景点类中添加新变量:

    ClassName comments;
    

    修改构造函数并添加这个变量也提供getter和setter。

    【讨论】:

    • 好的,但是如果我使用 cmets 对象数组,cmets 将不止一个
    • 是的,您可以使用 cmets 对象的 ArrayList(firebase 查询不支持数组,请务必使用 arraylist)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多