java - 从 Firebase 获取 Parcelable

标签 java android firebase firebase-realtime-database parcelable

所以我一直在使用 Firebase 数据库通过 Parcelables 来存储一些用户数据。现在,当我尝试获取这些 Parcelables 时,我收到此错误,指出我正在使用的类没有不带参数的构造函数。添加该构造函数并不能真正解决任何问题。是否有其他方法可以从数据库中获取 Parcelables,而无需实际“手动”解析信息?

大家干杯!

这只是我插入数据库的一个条目

AlarmParcel favorite = new AlarmParcel("id", "address", "name", "range", "units", latLng);
final ArrayList<AlarmParcel> favoriteList = new ArrayList<>();

当我检索该数据时

mMessagesDatabaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {

    for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {
        AlarmParcel alarm = postSnapshot.getValue(AlarmParcel.class);
        favoriteList.add(alarm);
    }

        mAdapter.setmAlarmData(favoriteList);
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        System.out.println("The read failed: " + databaseError.getCode());
    }
});

最后,Alarm Parcelable(不包括 getter 和 setter)

public class AlarmParcel implements Parcelable {
private String mId;
private String mAddress;
private String mName;
private String mRange;
private String mUnits;
private LatLng mPosition;

public AlarmParcel(String id, String address, String name, String range, String units, LatLng position)
{
    this.mId = id;
    this.mName = name;
    this.mAddress = address;
    this.mRange = range;
    this.mUnits = units;
    this.mPosition = position;
}

private AlarmParcel(Parcel in){
    mId = in.readString();
    mAddress = in.readString();
    mName = in.readString();
    mRange = in.readString();
    mUnits = in.readString();
    mPosition = in.readParcelable(LatLng.class.getClassLoader());
}

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

public String toString() { return mId + "--" + mAddress + "--" + mName + "--" + mRange + "--" + mUnits + "--" + mPosition; }

@Override
public void writeToParcel(Parcel parcel, int i) {
    parcel.writeString(mId);
    parcel.writeString(mAddress);
    parcel.writeString(mName);
    parcel.writeString(mRange);
    parcel.writeString(mUnits);
    parcel.writeParcelable(mPosition, PARCELABLE_WRITE_RETURN_VALUE);
}

public static final Parcelable.Creator<AlarmParcel> CREATOR = new Parcelable.Creator<AlarmParcel>() {
    @Override
    public AlarmParcel createFromParcel(Parcel parcel) {
        return new AlarmParcel(parcel);
    }

    @Override
    public AlarmParcel[] newArray(int i) {
        return new AlarmParcel[i];
    }

};

最佳答案

它需要一个不带参数的构造函数

这意味着空构造函数,所以只需添加它,这样她就会满意

public AlarmParcel(){}

关于java - 从 Firebase 获取 Parcelable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46714996/

相关文章:

android - Android MVVM : Should the view notify the view-model for every user interaction even trivial ones (only have UI consequence/no data)

java - HashMap 与值不匹配

java - 写入 firebase 在线程中返回异常

java - 使用 Java 缩放大图像

java.lang.NoClassDefFoundError 与 tomcat 和 axis2

java - AsyncPlayerChatEvent,尝试查看字符串数组中的字符串是否包含在第二个字符串数组中的另一个字符串中

android - 绘制文字(open gl es, android)

android - 错误:无法解决:com.google.android.gms:play-services-flags:12.0.1

ios - 为什么 Firebase 返回数组而不是字典?

java - 如何使用 Spring + Hibernate 将字符串读取为日期?