Я пытаюсь отправить приложение с предварительно заполненной базой данных. Для этого я использую комнату. Как говорится в документации, для этой задачи я использую Room.databaseBuilder (). CreateFromAsset, но, похоже, он не работает. Шаги, которые я сделал для копирования базы данных:
- создать активы / базы данных в моем / app / src / main / assets
- поместить туда мой файл sqlite.db
- выполнить задачу.
Здесь вы найдете мою базу данных приложений:
@Database(entities = {MenuItem.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase
{
public static AppDatabase INSTANCE;
public abstract MenuItemDao menuItemDao();
/**
* Create an instance if not existent or return the existing one.
*
* @param context application context.
* @return instance of this class.
*/
public static AppDatabase getAppDatabase(Context context)
{
if (INSTANCE == null)
{
INSTANCE = Room
.databaseBuilder(context, AppDatabase.class, "sqlite.db")
.createFromAsset("databases/sqlite.db")
.build();
}
return INSTANCE;
}
/**
* Destroy instance.
*/
public static void destroyInstance()
{
INSTANCE = null;
}
}
Это класс DAO:
@Dao
public interface MenuItemDao
{
@Query("SELECT * FROM menuItem WHERE parentId = (:parentId)")
List<MenuItem> getMenuItems(long parentId);
@Query("SELECT * FROM MenuItem WHERE id = (:id)")
MenuItem getSelectedItem(long id);
@Query("SELECT * FROM menuItem")
List<MenuItem> getAll();
}
И это сам элемент:
@Entity
public class MenuItem
{
@PrimaryKey
public long id;
@ColumnInfo(name = "title")
public String title;
@ColumnInfo(name = "isActivity")
public boolean isActivity;
@ColumnInfo(name = "parentId")
public long parentId;
}
Таким образом я получаю экземпляр AppDatabase:
AppDatabase db = AppDatabase.getAppDatabase(getApplicationContext());
Вот схема SQL:
-- TABLE
CREATE TABLE menu (id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, isActivity INTEGER, parentId INTEGER);
CREATE TABLE sqlite_sequence(name,seq);
-- INDEX
-- TRIGGER
-- VIEW
В базе данных есть некоторые элементы я уже протестировал, импортировав базу данных в браузер sqlite и проверив, присутствует ли контент. Это. Но после запуска приложения внутри нет строк. Есть идеи, что я делаю неправильно? Есть множество людей, которые утверждают, что эта функция комнаты работает нормально, так что я думаю, что делаю что-то не так.