Для меня, есть 5 шагов в создании создания и доступа к базе данных с ROOM.
1) Установочный объект - это ваше имя объекта (каждая запись в базе данных).
@Entity(tableName = "my_table")
public class MyEntity {
@PrimaryKey(autoGenerate = true)
private int mId;
private String mFirstName;
private String mLastName;
public MyEntity(String firstName, String lastName) {
this.mFirstName = firstName;
this.mLastName = lastName;
}
public int getId() {
return mId;
}
public String getFirstName() {
return mFirstName;
}
public String getLastName() {
return mLastName;
}
public void setId(int mId) {
this.mId = mId;
}
}
2) Настроить DAO, DAO - это способ взаимодействия с базами данных.
@Dao
public interface MyDao {
@Query("SELECT * FROM my_table")
LiveData<List<MyEntity>> getAllNames();
@Inster
void insert(MyEntity name);
3) Настройка базы данных
@DataBase(entities = {MyEntity.class}, version 1, exportschema = false}
public abastract class MyDatabase extends RoomDatabase {
private static MyDatabase INSTANCE;
public MyDao mMyDao;
public static synchronized MyDatabase getInstance(Context context) {
if(INSTANCE == null) {
INSTANCE = Room.databaseBuilder(context.getApplicationContext(),
MyDatabase.class "database_name")
.fallbackToDestructiveMigration()
.addCallback(roomCallBack)
.build();
}
return INSTANCE;
private static RoomDatabase.Callback roomCallBack = new RoomDatabase.Callback() {
@Override
public void onCreate(@NonNull SupportSQLiteDatabase db) {
super.onCreate(db);
new PopulateDbAsyncTask(INSTANCE).execute();
}
};
}
private static class PopulateDbAsyncTask extends AsyncTask<Void, Void, Void> {
private MyDao mMyDao;
public PopulateDbAsyncTask(MyDatabase db) {
this.mMyDao = db.MyDao();
}
@Override
protected Void doInBackground(Void... voids) {
mMyDao.insert(new MyEntity("FirstName", "LastName")
// Repeat as many times as needed.
return null;
}
}
4) Настройка репозитория, вызов репозитория / Создание базы данных
public class MyRepository {
private MyDao mMyDao;
private LiveData<List<MyEntity>> mMyList;
// Constructor will call the database Class.
public MyRepository(Application application) {
MyDatabase db = MyDatabase.getInstance(application);
this.mMyDao = db.mMyDao;
mMyList = mMyDao.getAllNames();
}
public LiveData<List<MyEntity> getAllNames() {
return mMyList;
}
}
5) Настройка View Model, доступ к вашей ViewModel издеятельность или фрагмент.
public class MyViewModel extends ViewModel {
private LiveData<List<MyEntity>> mMyList;
private Repository mRepository;
public MyViewModel(Application application) {
this.mApplication = application;
mRepository = new Repository(application);
this.mMyList = mRepository.getAllNames;
}
public LiveData<List<MyEntity>> getAllNames() {
return mMyList = mRepository.getAllNames();
}