我收到以下android房间数据库的异常
java.lang.IllegalArgumentException:@androidx.room.Database不定义元素视图((
我试图在SO上搜索任何解决方案,但找不到任何解决方案。有人能解释一下这个错误和什么有关吗?
我只在我的房间数据库中使用java。我没有使用kotlin。库版本
roomVersion = '2.2.1'
archLifecycleVersion = '2.1.0'
定义了Entities
、Dao
和一个扩展房间数据库的类
public static TncWalletAppDatabase getDatabase(final Context context) {
if (INSTANCE == null) {
synchronized (TncWalletAppDatabase.class) {
if (INSTANCE == null) {
INSTANCE = Room.databaseBuilder(context.getApplicationContext(),
TncWalletAppDatabase.class, "tnc_app_database")
.addCallback(sRoomDatabaseCallback)
.allowMainThreadQueries()
.build();
}
}
}
return INSTANCE;
}
这是我初始化数据库的方法。非常感谢在这方面的任何帮助。
数据库类:
@Database(entities = {Merchant.class, MerchantProfile.class, Receipt.class, ReceiptItems.class,TncTransaction.class}, version = 1)
public abstract class TncWalletAppDatabase extends RoomDatabase {
private static TncWalletAppDatabase INSTANCE;
public abstract MerchantDao mMerchantDao();
public abstract MerchantProfileDao mMerchantProfileDao();
public abstract ReceiptDao mReceiptDao();
public abstract ReceiptItemsDao mReceiptItemsDao();
public abstract TncTransactionDao mTncTransactionDao();
public static TncWalletAppDatabase getDatabase(final Context context) {
if (INSTANCE == null) {
synchronized (TncWalletAppDatabase.class) {
if (INSTANCE == null) {
INSTANCE = Room.databaseBuilder(context.getApplicationContext(),
TncWalletAppDatabase.class, "tnc_app_database")
.addCallback(sRoomDatabaseCallback)
.allowMainThreadQueries()
.build();
}
}
}
return INSTANCE;
}
private static RoomDatabase.Callback sRoomDatabaseCallback = new RoomDatabase.Callback() {
@Override
public void onCreate(@NonNull SupportSQLiteDatabase db) {
super.onCreate(db);
// database trigger for tnc_transaction table
new CreateDatabaseTriggerOnTncTransaction().execute();
}
};
private static class CreateDatabaseTriggerOnTncTransaction extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(final Void... params) {
/**
* Create database trigger when the tnc transaction table is created.
*/
SupportSQLiteDatabase supportSQLiteDatabase = INSTANCE.getOpenHelper().getWritableDatabase();
if( supportSQLiteDatabase != null ) {
String TABLE_NAME = "tnc_transaction";
supportSQLiteDatabase.execSQL(
"CREATE TRIGGER IF NOT EXISTS delete_" + TABLE_NAME + "_logs_max " +
"BEFORE INSERT ON " + TABLE_NAME + " " +
"WHEN (SELECT COUNT(*) FROM " + TABLE_NAME + ") > "
+ TncTransactionDao.MAX_ROW_COUNT +
" " + " BEGIN DELETE FROM " + TABLE_NAME + " WHERE id = "
+ "(SELECT MIN(id) FROM " + TABLE_NAME + "); " +
"END;");
}
return null;
}
}
}
是否将其添加到您的build.grade文件中?
dependencies {
def room_version = "2.2.5"
implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version" // For Kotlin use kapt instead of annotationProcessor
参考#https://developer.android.com/training/data-storage/room