3

我无法理解如何将改造与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);

这是推荐的方式吗?

4

0 回答 0