Помощь. Я хочу использовать базу данных комнат для своего приложения, но оно продолжает падать из-за исключения ClassNotFoundException. Я попытался сравнить свой код с несколькими другими стандартными кодами комнат, но не могу найти, что я делаю неправильно по сравнению с другими. Я думаю, что проблема либо в модели представления, либо в основной активности, но на всякий случай я опубликую все коды, связанные с комнатой.
DAO
@Dao
interface ExpenseDao {
@Insert
suspend fun insert(expense: Expense)
@Query("SELECT * FROM expense_table ORDER BY date ASC")
fun getAllExpenses(): Flow
}
База данных
@Database(entities = [Expense::class], version = 1)
abstract class ExpenseDatabase : RoomDatabase(){
abstract fun expenseDao(): ExpenseDao
}
Репозиторий
class ExpenseRepository (private val expenseDao: ExpenseDao){
fun getAllExpenses() = expenseDao.getAllExpenses()
suspend fun insert(expense: Expense){
expenseDao.insert(expense)
}
}
Модель просмотра
class ExpenseViewModel(): ViewModel() {
lateinit var expenseDatabase: ExpenseDatabase
lateinit var expenseRepository: ExpenseRepository
private val _expenseList = MutableStateFlow(emptyList())
val expenseList: StateFlow get() = _expenseList
fun setDatabase(context: Context){
expenseDatabase = Room.databaseBuilder(
context,
ExpenseDatabase::class.java,
"expense_database"
).build()
expenseRepository = ExpenseRepository(expenseDatabase.expenseDao())
viewModelScope.launch {
expenseRepository.getAllExpenses().collect { expenses ->
_expenseList.value = expenses
}
}
}
fun insert(expense: Expense){
viewModelScope.launch {
expenseRepository.insert(expense)
}
}
}
MainActivity
class MainActivity : ComponentActivity() {
private lateinit var expenseViewModel: ExpenseViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
expenseViewModel = ExpenseViewModel()
expenseViewModel.setDatabase(this)
enableEdgeToEdge()
setContent {
//..composables
}
}
}
}
Ошибка транзакции LogCat (не уверен, важно ли это, но все равно публикую)
Failed to execute the transaction: tId:-1621904711 ClientTransaction{
tId:-1621904711 transactionItems=[
tId:-1621904711 LaunchActivityItem{activityToken=android.os.BinderProxy@6057cfe,intent=Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 xflg=0x4 cmp=com.jazzant.expensetracker/.MainActivity },ident=119996064,info=ActivityInfo{454f36 com.jazzant.expensetracker.MainActivity},curConfig={1.0 310mcc260mnc [en_US] ldltr sw411dp w411dp h914dp 420dpi nrml long compactNeeded port finger qwerty/v/v dpad/v winConfig={ mBounds=Rect(0, 0 - 1080, 2400) mAppBounds=Rect(0, 0 - 1080, 2400) mMaxBounds=Rect(0, 0 - 1080, 2400) mDisplayRotation=ROTATION_0 mWindowingMode=fullscreen mActivityType=undefined mAlwaysOnTop=undefined mRotation=ROTATION_0} as.2 s.90 fontWeightAdjustment=0},overrideConfig={1.0 310mcc260mnc [en_US] ldltr sw411dp w411dp h914dp 420dpi nrml long compactNeeded port finger qwerty/v/v dpad/v winConfig={ mBounds=Rect(0, 0 - 1080, 2400) mAppBounds=Rect(0, 0 - 1080, 2400) mMaxBounds=Rect(0, 0 - 1080, 2400) mDisplayRotation=ROTATION_0 mWindowingMode=fullscreen mActivityType=standard mAlwaysOnTop=undefined mRotation=ROTATION_0} as.2 s.2 fontWeightAdjustment=0},deviceId=0,referrer=com.android.shell,procState=2,state=null,persistentState=null,pendingResults=null,pendingNewIntents=null,sceneTransitionInfo=null,profilerInfo=null,assistToken=android.os.BinderProxy@ac1a75b,shareableActivityToken=android.os.BinderProxy@d42bf8,activityWindowInfo=ActivityWindowInfo{isEmbedded=false, taskBounds=Rect(0, 0 - 1080, 2400), taskFragmentBounds=Rect(0, 0 - 1080, 2400)},displayId=0}
tId:-1621904711 ResumeActivityItem{mActivityToken=android.os.BinderProxy@6057cfe,procState=-1,isForward=true,shouldSendCompatFakeFocus=false}
tId:-1621904711 Target activity: com.jazzant.expensetracker.MainActivity
tId:-1621904711 ]
tId:-1621904711 }
LogCat ClassNotFoundException
FATAL EXCEPTION: main
Process: com.jazzant.expensetracker, PID: 15460
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.jazzant.expensetracker/com.jazzant.expensetracker.MainActivity}
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:4496)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4699)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:224)
at android.app.servertransaction.TransactionExecutor.executeNonLifecycleItem(TransactionExecutor.java:133)
at android.app.servertransaction.TransactionExecutor.executeTransactionItems(TransactionExecutor.java:103)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:80)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2961)
at android.os.Handler.dispatchMessage(Handler.java:132)
at android.os.Looper.dispatchMessage(Looper.java:333)
at android.os.Looper.loopOnce(Looper.java:263)
at android.os.Looper.loop(Looper.java:367)
at android.app.ActivityThread.main(ActivityThread.java:9282)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:566)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:929)
Caused by: java.lang.RuntimeException: Cannot find implementation for com.jazzant.expensetracker.ExpenseDatabase. ExpenseDatabase_Impl does not exist. Is Room annotation processor correctly configured?
at androidx.room.util.KClassUtil.findAndInstantiateDatabaseImpl(KClassUtil.jvmAndroid.kt:46)
at androidx.room.util.KClassUtil.findAndInstantiateDatabaseImpl$default(KClassUtil.jvmAndroid.kt:28)
at androidx.room.RoomDatabase$Builder.build(RoomDatabase.android.kt:1810)
at com.jazzant.expensetracker.ExpenseViewModel.setDatabase(ExpenseViewModel.kt:23)
at com.jazzant.expensetracker.MainActivity.onCreate(MainActivity.kt:66)
at android.app.Activity.performCreate(Activity.java:9306)
at android.app.Activity.performCreate(Activity.java:9284)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1541)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:4480)
... 14 more
Caused by: java.lang.ClassNotFoundException: com.jazzant.expensetracker.ExpenseDatabase_Impl
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:591)
at androidx.room.util.KClassUtil.findAndInstantiateDatabaseImpl(KClassUtil.jvmAndroid.kt:43)
... 22 more
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.jazzant.expensetracker.ExpenseDatabase_Impl" on path: DexPathList[[dex file "/data/data/com.jazzant.expensetracker/code_cache/.overlay/base.apk/classes3.dex", zip file "/data/app/~~K6yc_C4TQePemJyWM8d7kQ==/com.jazzant.expensetracker-mPG0qAs3U-ykcR57iCUt6A==/base.apk"],nativeLibraryDirectories=[/data/app/~~K6yc_C4TQePemJyWM8d7kQ==/com.jazzant.expensetracker-mPG0qAs3U-ykcR57iCUt6A==/lib/x86_64, /data/app/~~K6yc_C4TQePemJyWM8d7kQ==/com.jazzant.expensetracker-mPG0qAs3U-ykcR57iCUt6A==/base.apk!/lib/x86_64, /system/lib64, /system_ext/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:259)
at java.lang.ClassLoader.loadClass(ClassLoader.java:642)
at java.lang.ClassLoader.loadClass(ClassLoader.java:578)
... 25 more
Подробнее здесь: https://stackoverflow.com/questions/798 ... r-database
SQLite Room ClassNotFoundException для базы данных ⇐ Android
Форум для тех, кто программирует под Android
-
Anonymous
1762075922
Anonymous
Помощь. Я хочу использовать базу данных комнат для своего приложения, но оно продолжает падать из-за исключения ClassNotFoundException. Я попытался сравнить свой код с несколькими другими стандартными кодами комнат, но не могу найти, что я делаю неправильно по сравнению с другими. Я думаю, что проблема либо в модели представления, либо в основной активности, но на всякий случай я опубликую все коды, связанные с комнатой.
DAO
@Dao
interface ExpenseDao {
@Insert
suspend fun insert(expense: Expense)
@Query("SELECT * FROM expense_table ORDER BY date ASC")
fun getAllExpenses(): Flow
}
База данных
@Database(entities = [Expense::class], version = 1)
abstract class ExpenseDatabase : RoomDatabase(){
abstract fun expenseDao(): ExpenseDao
}
Репозиторий
class ExpenseRepository (private val expenseDao: ExpenseDao){
fun getAllExpenses() = expenseDao.getAllExpenses()
suspend fun insert(expense: Expense){
expenseDao.insert(expense)
}
}
Модель просмотра
class ExpenseViewModel(): ViewModel() {
lateinit var expenseDatabase: ExpenseDatabase
lateinit var expenseRepository: ExpenseRepository
private val _expenseList = MutableStateFlow(emptyList())
val expenseList: StateFlow get() = _expenseList
fun setDatabase(context: Context){
expenseDatabase = Room.databaseBuilder(
context,
ExpenseDatabase::class.java,
"expense_database"
).build()
expenseRepository = ExpenseRepository(expenseDatabase.expenseDao())
viewModelScope.launch {
expenseRepository.getAllExpenses().collect { expenses ->
_expenseList.value = expenses
}
}
}
fun insert(expense: Expense){
viewModelScope.launch {
expenseRepository.insert(expense)
}
}
}
MainActivity
class MainActivity : ComponentActivity() {
private lateinit var expenseViewModel: ExpenseViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
expenseViewModel = ExpenseViewModel()
expenseViewModel.setDatabase(this)
enableEdgeToEdge()
setContent {
//..composables
}
}
}
}
Ошибка транзакции LogCat (не уверен, важно ли это, но все равно публикую)
Failed to execute the transaction: tId:-1621904711 ClientTransaction{
tId:-1621904711 transactionItems=[
tId:-1621904711 LaunchActivityItem{activityToken=android.os.BinderProxy@6057cfe,intent=Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 xflg=0x4 cmp=com.jazzant.expensetracker/.MainActivity },ident=119996064,info=ActivityInfo{454f36 com.jazzant.expensetracker.MainActivity},curConfig={1.0 310mcc260mnc [en_US] ldltr sw411dp w411dp h914dp 420dpi nrml long compactNeeded port finger qwerty/v/v dpad/v winConfig={ mBounds=Rect(0, 0 - 1080, 2400) mAppBounds=Rect(0, 0 - 1080, 2400) mMaxBounds=Rect(0, 0 - 1080, 2400) mDisplayRotation=ROTATION_0 mWindowingMode=fullscreen mActivityType=undefined mAlwaysOnTop=undefined mRotation=ROTATION_0} as.2 s.90 fontWeightAdjustment=0},overrideConfig={1.0 310mcc260mnc [en_US] ldltr sw411dp w411dp h914dp 420dpi nrml long compactNeeded port finger qwerty/v/v dpad/v winConfig={ mBounds=Rect(0, 0 - 1080, 2400) mAppBounds=Rect(0, 0 - 1080, 2400) mMaxBounds=Rect(0, 0 - 1080, 2400) mDisplayRotation=ROTATION_0 mWindowingMode=fullscreen mActivityType=standard mAlwaysOnTop=undefined mRotation=ROTATION_0} as.2 s.2 fontWeightAdjustment=0},deviceId=0,referrer=com.android.shell,procState=2,state=null,persistentState=null,pendingResults=null,pendingNewIntents=null,sceneTransitionInfo=null,profilerInfo=null,assistToken=android.os.BinderProxy@ac1a75b,shareableActivityToken=android.os.BinderProxy@d42bf8,activityWindowInfo=ActivityWindowInfo{isEmbedded=false, taskBounds=Rect(0, 0 - 1080, 2400), taskFragmentBounds=Rect(0, 0 - 1080, 2400)},displayId=0}
tId:-1621904711 ResumeActivityItem{mActivityToken=android.os.BinderProxy@6057cfe,procState=-1,isForward=true,shouldSendCompatFakeFocus=false}
tId:-1621904711 Target activity: com.jazzant.expensetracker.MainActivity
tId:-1621904711 ]
tId:-1621904711 }
LogCat ClassNotFoundException
FATAL EXCEPTION: main
Process: com.jazzant.expensetracker, PID: 15460
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.jazzant.expensetracker/com.jazzant.expensetracker.MainActivity}
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:4496)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4699)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:224)
at android.app.servertransaction.TransactionExecutor.executeNonLifecycleItem(TransactionExecutor.java:133)
at android.app.servertransaction.TransactionExecutor.executeTransactionItems(TransactionExecutor.java:103)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:80)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2961)
at android.os.Handler.dispatchMessage(Handler.java:132)
at android.os.Looper.dispatchMessage(Looper.java:333)
at android.os.Looper.loopOnce(Looper.java:263)
at android.os.Looper.loop(Looper.java:367)
at android.app.ActivityThread.main(ActivityThread.java:9282)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:566)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:929)
Caused by: java.lang.RuntimeException: Cannot find implementation for com.jazzant.expensetracker.ExpenseDatabase. ExpenseDatabase_Impl does not exist. Is Room annotation processor correctly configured?
at androidx.room.util.KClassUtil.findAndInstantiateDatabaseImpl(KClassUtil.jvmAndroid.kt:46)
at androidx.room.util.KClassUtil.findAndInstantiateDatabaseImpl$default(KClassUtil.jvmAndroid.kt:28)
at androidx.room.RoomDatabase$Builder.build(RoomDatabase.android.kt:1810)
at com.jazzant.expensetracker.ExpenseViewModel.setDatabase(ExpenseViewModel.kt:23)
at com.jazzant.expensetracker.MainActivity.onCreate(MainActivity.kt:66)
at android.app.Activity.performCreate(Activity.java:9306)
at android.app.Activity.performCreate(Activity.java:9284)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1541)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:4480)
... 14 more
Caused by: java.lang.ClassNotFoundException: com.jazzant.expensetracker.ExpenseDatabase_Impl
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:591)
at androidx.room.util.KClassUtil.findAndInstantiateDatabaseImpl(KClassUtil.jvmAndroid.kt:43)
... 22 more
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.jazzant.expensetracker.ExpenseDatabase_Impl" on path: DexPathList[[dex file "/data/data/com.jazzant.expensetracker/code_cache/.overlay/base.apk/classes3.dex", zip file "/data/app/~~K6yc_C4TQePemJyWM8d7kQ==/com.jazzant.expensetracker-mPG0qAs3U-ykcR57iCUt6A==/base.apk"],nativeLibraryDirectories=[/data/app/~~K6yc_C4TQePemJyWM8d7kQ==/com.jazzant.expensetracker-mPG0qAs3U-ykcR57iCUt6A==/lib/x86_64, /data/app/~~K6yc_C4TQePemJyWM8d7kQ==/com.jazzant.expensetracker-mPG0qAs3U-ykcR57iCUt6A==/base.apk!/lib/x86_64, /system/lib64, /system_ext/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:259)
at java.lang.ClassLoader.loadClass(ClassLoader.java:642)
at java.lang.ClassLoader.loadClass(ClassLoader.java:578)
... 25 more
Подробнее здесь: [url]https://stackoverflow.com/questions/79806950/sqlite-room-classnotfoundexception-for-database[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия