我在尝试将我的实体保存到 Room Persistence 数据库时遇到了困难。据我了解 RPL (RoomPersistenceLibrary) 将只接受原始类型,因此我需要使用类型转换器将我的两个字段:Calendar mStartDate
、Calendar mEndTime
转换为字符串(两个字段用于设置开始和结束日期 - 分钟、小时、天、月、年,每次我创建我的 WeekViewEvent
- 请参阅构造函数)。
所以我创建了一个,但它仍然有问题,因为 Android Studio 一遍又一遍地向我显示相同的错误: 无法弄清楚如何将此字段保存到数据库中 (..) 我无法追踪错误,因为控制台不显示代码行。
知道我可能做错了什么吗? 预先感谢您的任何帮助! :)
WeekViewEvent.class:
@Entity
public class WeekViewEvent implements Serializable {
@NonNull
@PrimaryKey
private long mId;
private String mName;
private String mLocation;
private int mColor;
private boolean mAllDay;
private Shader mShader;
private String Identifier;
@TypeConverters({WeekViewEventCONVERTER.class})
private Calendar mStartTime;
@TypeConverters({WeekViewEventCONVERTER.class})
private Calendar mEndTime;
public WeekViewEvent(long id, String name, String location, String identifier, int color, int startYear, int startMonth, int startDay, int startHour, int startMinute, int endYear, int endMonth, int endDay, int endHour, int endMinute) {
this.mId = id;
this.mStartTime = Calendar.getInstance();
this.mStartTime.set(Calendar.YEAR, startYear);
this.mStartTime.set(Calendar.MONTH, startMonth - 1);
this.mStartTime.set(Calendar.DAY_OF_MONTH, startDay);
this.mStartTime.set(Calendar.HOUR_OF_DAY, startHour);
this.mStartTime.set(Calendar.MINUTE, startMinute);
this.mEndTime = Calendar.getInstance();
this.mEndTime.set(Calendar.YEAR, endYear);
this.mEndTime.set(Calendar.MONTH, endMonth - 1);
this.mEndTime.set(Calendar.DAY_OF_MONTH, endDay);
this.mEndTime.set(Calendar.HOUR_OF_DAY, endHour);
this.mEndTime.set(Calendar.MINUTE, endMinute);
this.mName = name;
this.Identifier = identifier;
this.mLocation = location;
this.mColor = color;}
...
}
WeekViewEventCONVERTER.class:
@TypeConverter
public static Calendar fromString (String value){
Type calendarType = new TypeToken<Calendar>() {}.getType();
return new Gson().fromJson(value, calendarType);
}
@TypeConverter
public static String fromCalendar (Calendar mStartTime){
Gson gson = new Gson();
String json = gson.toJson(mStartTime);
return json;
}
和 WeekViewEventDAO:
@Dao
public interface WeekViewEventDAO {
@Insert(onConflict = OnConflictStrategy.REPLACE)
public long insertWeekViewEvent (WeekViewEvent event);
@Update(onConflict = OnConflictStrategy.REPLACE)
public void updateWeekViewEvent (WeekViewEvent event);
@Delete
public void deleteWeekViewEvent (WeekViewEvent event);
@Query("DELETE FROM WeekViewEvent")
public void deleteAllWeekViewEvents();
@Query("SELECT * FROM WeekViewEvent")
WeekViewEvent getWeekViewEvent();
@Query("SELECT * FROM WeekViewEvent")
public List<WeekViewEvent> getAllWeekVieweventsList();}
最佳答案
我认为你的问题是你没有这个字段的类型转换器:
private Shader mShader;
尝试添加@Ignore
将其标记为非持久性。
关于java - Android Room Persistence Library TypeConverter 未知问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48583656/