java - Android Room Persistence Library TypeConverter 未知问题

标签 java android

我在尝试将我的实体保存到 Room Persistence 数据库时遇到了困难。据我了解 RPL (RoomPersistenceLibrary) 将只接受原始类型,因此我需要使用类型转换器将我的两个字段:Calendar mStartDateCalendar mEndTime 转换为字符串(两个字段用于设置开始和结束日期 - 分钟、小时、天、月、年,每次我创建我的 WeekViewEvent - 请参阅构造函数)。

所以我创建了一个,但它仍然有问题,因为 Android Studio 一遍又一遍地向我显示相同的错误: 无法弄清楚如何将此字段保存到数据库中 (..) enter image description here 我无法追踪错误,因为控制台不显示代码行。

知道我可能做错了什么吗? 预先感谢您的任何帮助! :)

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/

相关文章:

java - 使用 OpenStack4j 向 IBM 对象存储进行身份验证

java - 以编程方式水平滚动 SWT 表

Android,新支持 lib 25,BottomNavigationView 实现

android - 我可以在解析时将一个人与 Twitter 和 Facebook 联系起来吗?

java - java反射中的类加载异常

java - 为什么安装失败

java - 如何创建固定字节大小的字符串

android - 如何查询Android SDK 播放列表中的歌曲?

java - 如何将对象存储到 Android 中的 SQLite 数据库中?

android - 如何在Android中限制显示列表