【发布时间】:2018-07-02 14:07:43
【问题描述】:
使用 Room 和 Retrofit 创建 DAO 的正确方法是什么?
我有这样的数据库模块:
@Module
public class ApplicationDatabaseModule {
private final String mDatabaseName;
ApplicationDatabase mApplicationDatabase;
public ApplicationDatabaseModule(@ApplicationContext Context context, Class<? extends ApplicationDatabase> roomDataBaseClass, String databaseName) {
mDatabaseName = databaseName;
mApplicationDatabase = Room.databaseBuilder(context, roomDataBaseClass, mDatabaseName).build();
}
@Singleton
@Provides
ApplicationDatabase provideApplicationDatabase() {
return mApplicationDatabase;
}
@Singleton
@Provides
CitiesDao provideCitiesDao() {
return mApplicationDatabase.getCitiesDao();
}
}
POJO 类是这样的:
@Entity
public class City {
@PrimaryKey
@ColumnInfo(name = "id")
private int cityId;
@ColumnInfo(name = "name")
private String cityName;
public int getCityId() {
return cityId;
}
public void setCityId(int cityId) {
this.cityId = cityId;
}
public String getCityName() {
return cityName;
}
public void setCityName(String cityName) {
this.cityName = cityName;
}
@Override
public String toString() {
return "City [cityId = " + cityId + ", cityName = " + cityName + "]";
}
}
DAO 界面如下:
@Dao
public interface CitiesDao {
@Insert
void insertCities(City... cities);
@Query("SELECT * FROM City")
City[] queryCities();
}
以及用于改造的 API:
public interface CitiesApi {
@GET("/api/cities")
Call<City[]> requestCities();
}
据我所知,DAO 负责访问数据,包括通过 REST 客户端传递的数据。但这两个部分由接口表示并内置在单独的类中。实现 DAO 的正确方法是什么?
【问题讨论】:
-
检查我的示例应用程序,说明:github.com/mtangoo/Kasuku-Muvi
标签: android retrofit2 dao dagger-2 android-room