android房间数据库java.lang.IllegalArgumentException出现以下异常:@androi



我收到以下android房间数据库的异常

java.lang.IllegalArgumentException:@androidx.room.Database不定义元素视图((

我试图在SO上搜索任何解决方案,但找不到任何解决方案。有人能解释一下这个错误和什么有关吗?

我只在我的房间数据库中使用java。我没有使用kotlin。库版本

roomVersion = '2.2.1'
archLifecycleVersion = '2.1.0'

定义了EntitiesDao和一个扩展房间数据库的类

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

最新更新