我无法理解如何使用android persistent library room进行改造。
假设我已定义以下模型实体:
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);
是推荐的方式吗?