我无法理解如何将改造与android 持久图书馆室一起使用。
假设我定义了以下模型实体:
Entity(tableName = MY_EVENT_TABLE)
public class Event {
public static final String TABLE_NAME = "events";
public static final String DATE_FIELD = "date";
@PrimaryKey(autoGenerate = true)
private int id;
private String name;
private String description;
@ColumnInfo(name = DATE_FIELD)
private LocalDateTime date;
public Event(int id, String name, String description, LocalDateTime date) {
this.id = id;
this.name = name;
this.description = description;
this.date = date;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public String getDescription() {
return description;
}
public LocalDateTime getDate() {
return date;
}
@Override
public String toString() {
return "Event{" +
"id=" + id +
", name='" + name + '\'' +
", description='" + description + '\'' +
", date=" + date +
'}';
}
public long getDaysUntil() {
return ChronoUnit.DAYS.between(LocalDateTime.now(), getDate());
}
}
并且可以说我最初是从经过改造的网络服务中获取这些信息的。因此,在我调用改造服务后,它将返回一个填充了 Event 类型的类(使用 gson)。
现在一切都很好,我们有一个名为 Event 的完全填充的类,其中包含通过改造 api 服务调用来自我们的休息服务器的数据。
现在我想确保这些信息进入房间持久库。我该怎么做呢:
即使我构建了数据库,我只是将类名传递给它,而不是返回的实际类改造。
例如,要建立一个房间数据库,我会这样做:
Room.databaseBuilder(context.getApplicationContext(), EventDatabase.class, "event_db").build();
现在我们有了一个事件数据库,但是我如何将我的信息从改造中获取到数据库表 MY_EVENT_TABLE 中?
我有一个想法,但不确定它是否正确或有效。如果我在房间里有这样的刀:
@Dao
public interface EventDao {
@Query("SELECT * FROM " + Event.TABLE_NAME + " WHERE " + Event.DATE_FIELD + " > :minDate")
LiveData<List<Event>> getEvents(LocalDateTime minDate);
@Insert(onConflict = REPLACE)
void addEvent(Event event);
@Delete
void deleteEvent(Event event);
@Update(onConflict = REPLACE)
void updateEvent(Event event);
}
从服务器获取数据后,我可以调用 DAO 插入方法吗?
所以它会是:eventDao.addEvent(event);
这是推荐的方式吗?