所以我一直在使用 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/