sqlite 在图书馆项目中使用Room DB

aydmsdu9  于 2023-04-21  发布在  SQLite
关注(0)|答案(2)|浏览(121)

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

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

但是,当我在应用程序中直接使用房间数据库时,它工作得很好。在库项目中使用房间数据库有什么限制吗?

oipij1gg

oipij1gg1#

首先卸载您的应用程序到设备和模拟器。
然后将下面的步骤添加到房间数据库中。将下面的依赖项添加到应用程序级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"
w41d8nur

w41d8nur2#

在图书馆项目中使用房间数据库有什么限制吗?
不完全是。你可以在你的图书馆项目中添加房间依赖性,并且仍然在你的应用中使用它。
您需要做的唯一更改是在应用程序模块的build.gradle文件中添加以下内容

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

问题是,与compileapi依赖不同,annotationProcessor不是可传递的。这意味着注解处理器仅适用于添加它的模块。
annotationProcessor负责生成你的AppDatabase_Impl类,但它在你的app模块中不可用。所以,这就是它没有被生成的原因。
希望这有帮助!

相关问题