@chisato30

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

「cannot find implementation for database.」というエラーが出て、画面遷移ができません。

解決したいこと

ボタンをタップして画面遷移ができるようにしたい。

kotlinでToDoListを作っています。
buildすると、最初のページが表示され、
「ToDoを追加」のボタンを押すと、
クラッシュします。

次の画面へ遷移するようにしたいです。
解決方法を教えて下さい。

発生している問題・エラー

Logcatのエラーです。

2022-07-17 20:43:35.266 20659-20659/com.example.todolist E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.todolist, PID: 20659
    java.lang.RuntimeException: cannot find implementation for database.ToDoDatabase. ToDoDatabase_Impl does not exist
        at androidx.room.Room.getGeneratedImplementation(Room.java:100)
        at androidx.room.RoomDatabase$Builder.build(RoomDatabase.java:1486)
        at database.ToDoDatabase$Companion.getInstance(ToDoDatabese.kt:29)
        at com.example.todolist.EditFragment.onCreateView(EditFragment.kt:26)
        at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698)
        at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
        at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2224)
        at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1997)
        at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1953)
        at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1849)
        at androidx.fragment.app.FragmentManager$4.run(FragmentManager.java:413)
        at android.os.Handler.handleCallback(Handler.java:942)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loopOnce(Looper.java:201)
        at android.os.Looper.loop(Looper.java:288)
        at android.app.ActivityThread.main(ActivityThread.java:7844)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)

ToDoDatabese.ktの内容です。

package database

import android.content.Context
import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase

@Database(entities = [ToDo::class], version = 1, exportSchema = false)
abstract class ToDoDatabase : RoomDatabase() {

    abstract val toDoDatabaseDao: ToDoDatabaseDao

    companion object {

        @Volatile
        private var INSTANCE: ToDoDatabase? = null

        fun getInstance(context: Context): ToDoDatabase {
            synchronized(this) {
                var instance = INSTANCE

                if (instance == null) {
                    instance = Room.databaseBuilder(
                        context.applicationContext,
                        ToDoDatabase::class.java,
                        "to_do_database"
                    )
                        .fallbackToDestructiveMigration()
                        .build()
                    INSTANCE = instance
                }
                return instance
            }
        }
    }
}


EditFragment.ktの内容です。

package com.example.todolist

import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.databinding.DataBindingUtil
import androidx.lifecycle.ViewModelProvider
import com.example.todolist.databinding.FragmentEditBinding
import database.ToDoDatabase


class EditFragment : Fragment() {

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?,
    ): View? {

        val binding: FragmentEditBinding = DataBindingUtil.inflate(
            inflater, R.layout.fragment_edit, container, false)

        val application = requireNotNull(this.activity).application

        val dataSource = ToDoDatabase.getInstance(application).toDoDatabaseDao

        val viewModelFactory = EditViewModelFactory(dataSource, application)

        val editViewModel =
            ViewModelProvider(
                this, viewModelFactory).get(EditViewModel::class.java)

        binding.editViewModel = editViewModel

        binding.lifecycleOwner = this

        return binding.root
    }
}


例)build.gradle(app)の内容です。

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'



android {
    compileSdk 32

    defaultConfig {
        applicationId "com.example.todolist"
        minSdk 23
        targetSdk 32
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        multiDexEnabled true
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
    dataBinding {
        enabled = true
    }
}

dependencies {

    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
    implementation "androidx.appcompat:appcompat:$supportlibVersion"
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
    implementation "com.google.android.material:material:1.2.1"
    implementation "androidx.navigation:navigation-fragment-ktx:$navigationVersion"
    implementation "androidx.navigation:navigation-ui-ktx:$navigationVersion"
    implementation "com.google.android.material:material:$supportlibVersion"
    implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"
    implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0"
    implementation 'androidx.room:room-common:2.4.2'
    implementation 'androidx.room:room-ktx:2.4.2'
    kapt "android.arch.persistence.room:compiler:1.1.1"
    implementation 'androidx.room:room-runtime:2.4.2'}

自分で試したこと

ネットでエラーを検索して、
build.gradle(app)のdependencies {
に検索して出てきた解決方法を追記・消去しました。
多くを検索して、実行しましたが解決に至りません。
解決方法をご教授ください。

0 likes

No Answers yet.

Your answer might help someone💌