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());
   }
}

そして、最初にこの情報を後付けのWebサービスから取得するとしましょう。そのため、レトロフィット サービスを呼び出すと、Event タイプのクラスが (gson を使用して) 返されます。

これで、レトロフィット API サービス呼び出しを介して残りのサーバーからのデータを使用して、Event と呼ばれる完全に設定されたクラスが作成されました。

ここで、この情報が部屋の永続的なライブラリに入るようにしたいと思います。これを行うにはどうすればよいですか:

データベースを構築しても、返された実際のクラスの改良ではなく、クラス名を渡すだけです。

たとえば、部屋のデータベースを構築するには、次のようにします。

Room.databaseBuilder(context.getApplicationContext(), EventDatabase.class, "event_db").build();

これでイベントデータベースができましたが、DB テーブル 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