在图书馆项目中使用 Room DB

问题描述 投票:0回答:2

我正在尝试将房间数据库集成到图书馆项目中

apply plugin: 'com.android.library'
.
.
.
.
.
compile "android.arch.persistence.room:runtime:$rootProject.roomVersion"

annotationProcessor "android.arch.persistence.room:compiler:$rootProject.roomVersion"

当我在我的应用程序中使用这个库并尝试访问 Room DB 时,它总是崩溃并给我以下异常

Android room persistent: AppDatabase_Impl does not exist

然而,当我在我的应用程序中直接使用房间数据库时,它工作正常。 在图书馆项目中使用房间数据库有什么限制吗?

android database sqlite android-sqlite android-room
2个回答
0
投票

首先将您的应用程序卸载到设备和模拟器中。

然后按照下面步骤进入db房间。 将以下依赖项添加到应用程序级别的 gradle 文件中。

    implementation "android.arch.persistence.room:runtime:1.0.0"
annotationProcessor "android.arch.persistence.room:compiler:1.0.0"

比像下面这样制作应用程序级别的活动..

public class AppActivity extends Application {

static AppDatabase db;

@Override
public void onCreate() {
    super.onCreate();
    db = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, "database-name").build();
}

public static AppDatabase getDatabase() {
    return db;
}

}

然后制作应用程序数据库..

@Database(entities = {MyTable.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
public abstract MyTableDao getTableDao();
}

道..

@Dao
public interface MyTableDao {
@Insert
void insertData(MyTable myTable);
@Query("SELECT * FROM MyTable ")
List<MyTable> getData();

}

然后还将应用程序活动定义到应用程序标签中的 android 清单文件中。

        android:name=".AppActivity"

0
投票

在图书馆项目中使用room DB有什么限制吗?

不是真的。您可以在您的图书馆项目中添加房间依赖项,并仍然在您的应用程序中使用它。

您需要做的唯一更改是在您的应用程序模块的

build.gradle
文件中添加以下内容

annotationProcessor "android.arch.persistence.room:compiler:$rootProject.roomVersion"

问题是,与

compile
api
依赖关系不同,
annotationProcessor
不是可传递的。这意味着,注释处理器仅适用于添加它的模块。

annotationProcessor 负责生成您的

AppDatabase_Impl
类,但它在您的应用程序模块中不可用。所以,这就是它没有被生成的原因。

希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.