小编Bas*_* SG的帖子

Android Room 扩展默认数据库

美好的一天堆垛机。

\n\n

假设你必须声明一个带有默认模式的 android 库,其中有 n 个表,如下所示:

\n\n
package com.test.library.db;\n\nimport android.arch.persistence.room.Database;\nimport android.arch.persistence.room.RoomDatabase;\nimport com.test.library.db.entities.defaultTable1;\nimport com.test.library.db.entities.defaultTable2;\nimport com.test.library.db.entities.defaultTableN;\nimport com.test.library.db.dao.DefaultTable1Dao;\nimport com.test.library.db.dao.DefaultTable2Dao;\nimport com.test.library.db.dao.DefaultTableNDao;\n\n@Database(entities = {\n        defaultTable1.class,\n        defaultTable2.class,\n        defaultTableN.class\n}, version = 1)\n\npublic abstract class AppDatabase extends RoomDatabase {\n\n    public abstract DefaultTable1Dao defaultTable1Dao();\n    public abstract DefaultTable2Dao defaultTable2Dao();\n    public abstract DefaultTableNDao defaultTableNDao();\n\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后您需要将默认架构从 android 库扩展到应用程序,如下所示:

\n\n
package com.test.myapp.db;\n\nimport android.arch.persistence.room.Database;\nimport com.test.myapp.db.entities.Table1;\nimport com.test.myapp.db.entities.Table2;\nimport com.test.myapp.db.entities.TableN;\nimport com.test.myapp.db.dao.Table1Dao;\nimport com.test.myapp.db.dao.Table2Dao;\nimport com.test.myapp.db.dao.TableNDao;\n\n@Database(entities = {\n        Table1.class,\n        Table2.class,\n        TableN.class\n}, version = 1)\n\npublic abstract class AppDatabase extends com.test.library.db.AppDatabase {\n\n    public abstract Table1Dao table1Dao();\n    public abstract Table2Dao table2Dao();\n …
Run Code Online (Sandbox Code Playgroud)

java android annotations android-library android-room

6
推荐指数
0
解决办法
870
查看次数

Android Room 通用 DAO

美好的一天 Stack,我正在开发一个使用 Android Room 1.0.0 Alpha 5 的 Android 项目,我面临的主要问题是每次我需要从房间调用 DAO 之一时,我都需要做一些类似的事情这个:

活动.java:

...
AppDatabase db = Room.databaseBuilder(context, AppDatabase.class, "Storage").build();
Table1 table = new Table1();
table.setId(1);
table.setName("Hello");
new AccessDB().execute(1);

/* Generic AccessDB needed */
private class AccessDB extends AsyncTask<Integer,Void,List<Table1>> {

    @Override
    protected List<Table1> doInBackground(Integer... param) {
        switch(param[0]) {
            case 1:
                return db.Table1DAO().create();
            case 2:
                return db.Table1DAO().read();
        }
        return new ArrayList<>();
    }

    @Override
    protected void onPostExecute(List<Table1> list) {
        processData(list);
    }
}
...
Run Code Online (Sandbox Code Playgroud)

我知道我可以从主线程访问 Room DB,这会缩小代码,但我认为这不是一个好习惯,因为这会在每次必须处理数据时锁定活动。

因此,如果我需要从“Table2”插入或读取数据,我将不得不重新做同样的事情,如果我可以将实体类型转换为“T”之类的泛型,然后创建一个泛型,那就太好了“访问数据库”。但由于我对 Java 不太熟悉……我目前正在为此苦苦挣扎。

这是实例的一些其他代码。

应用数据库.java:

@Database(entities …
Run Code Online (Sandbox Code Playgroud)

java android dao android-asynctask android-room

4
推荐指数
1
解决办法
5286
查看次数