AndroidViewModel无法创建实例Kotlin

AndroidViewModel无法创建实例Kotlin,android,kotlin,android-runtime,Android,Kotlin,Android Runtime,我已经检查了所有相关主题。但我自己找不到解决办法。我使用ApiCall加载实时数据,一切正常。但现在我需要使用Roo,这样即使没有互联网连接,用户也可以使用它一段时间。好的,让我向你介绍我的错误 2020-11-27 13:11:46.317 15232-15232/com.example.jirataskmvvm E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.jirataskmvvm, PID: 152

我已经检查了所有相关主题。但我自己找不到解决办法。我使用ApiCall加载实时数据,一切正常。但现在我需要使用Roo,这样即使没有互联网连接,用户也可以使用它一段时间。好的,让我向你介绍我的错误

    2020-11-27 13:11:46.317 15232-15232/com.example.jirataskmvvm E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.jirataskmvvm, PID: 15232
    java.lang.RuntimeException: Cannot create an instance of class com.example.jirataskmvvm.viewModel.CityRmViewModel
        at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.java:275)
        at androidx.lifecycle.SavedStateViewModelFactory.create(SavedStateViewModelFactory.java:106)
        at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:185)
        at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150)
        at com.example.jirataskmvvm.view.citySelectPage.citySelectionPage.onCreateView(citySelectionPage.kt:29)
        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.dispatchStateChange(FragmentManager.java:2629)
        at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2577)
        at androidx.fragment.app.Fragment.performActivityCreated(Fragment.java:2722)
        at androidx.fragment.app.FragmentStateManager.activityCreated(FragmentStateManager.java:346)
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1188)
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1356)
        at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434)
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1497)
        at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2625)
        at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2577)
        at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:247)
        at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:541)
        at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:210)
        at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1435)
        at android.app.Activity.performStart(Activity.java:8024)
        at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3475)
        at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221)
        at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201)
        at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:223)
        at android.app.ActivityThread.main(ActivityThread.java:7656)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Constructor.newInstance0(Native Method)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
        at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.java:267)
        at androidx.lifecycle.SavedStateViewModelFactory.create(SavedStateViewModelFactory.java:106) 
        at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:185) 
        at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150) 
        at com.example.jirataskmvvm.view.citySelectPage.citySelectionPage.onCreateView(citySelectionPage.kt:29) 
        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.dispatchStateChange(FragmentManager.java:2629) 
        at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2577) 
        at androidx.fragment.app.Fragment.performActivityCreated(Fragment.java:2722) 
        at androidx.fragment.app.FragmentStateManager.activityCreated(FragmentStateManager.java:346) 
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1188) 
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1356) 
        at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434) 
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1497) 
        at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2625) 
        at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2577) 
        at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:247) 
        at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:541) 
        at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:210) 
        at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1435) 
        at android.app.Activity.performStart(Activity.java:8024) 
        at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3475) 
        at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221) 
        at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201) 
        at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:223) 
        at android.app.ActivityThread.main(ActivityThread.java:7656) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 
     Caused by: java.lang.IllegalStateException: Cannot access database on the main thread since it may potentially lock the UI for a long period of time.
        at androidx.room.RoomDatabase.assertNotMainThread(RoomDatabase.java:267)
        at androidx.room.RoomDatabase.query(RoomDatabase.java:323)
2020-11-27 13:11:46.317 15232-15232/com.example.jirataskmvvm E/AndroidRuntime:     at androidx.room.util.DBUtil.query(DBUtil.java:83)
        at com.example.jirataskmvvm.Room.CityDao_Impl.readAllCities(CityDao_Impl.java:70)
        at com.example.jirataskmvvm.Room.CityRoomRepository.<init>(CityRoomRepository.kt:17)
        at com.example.jirataskmvvm.viewModel.CityRmViewModel.<init>(CityRmViewModel.kt:28)
            ... 41 more
2020-11-27 13:11:46.335 15232-15232/com.example.jirataskmvvm I/Process: Sending signal. PID: 15232 SIG: 9
2020-11-27 13:11:46.317 15232-15232/com.example.jirataskmvvm E/AndroidRuntime:致命异常:main
进程:com.example.jirataskmvvm,PID:15232
java.lang.RuntimeException:无法创建类com.example.jirataskmvvm.viewModel.CityRmViewModel的实例
在androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.java:275)中
在androidx.lifecycle.SavedStateViewModelFactory.create(SavedStateViewModelFactory.java:106)
位于androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:185)
位于androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150)
在com.example.jirataskmvvm.view.citySelectPage.citySelectionPage.onCreateView(citySelectionPage.kt:29)上
位于androidx.fragment.app.fragment.performCreateView(fragment.java:2698)
位于androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
位于androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
位于androidx.fragment.app.FragmentManager.AddAddAddedFragments(FragmentManager.java:2224)
在androidx.fragment.app.FragmentManager.ExecutePostGether(FragmentManager.java:1997)
在androidx.fragment.app.FragmentManager.RemovedAndTopOperationsAndExecute(FragmentManager.java:1953)
位于androidx.fragment.app.FragmentManager.ExecutPendingActions(FragmentManager.java:1849)
位于androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2629)
位于androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2577)
位于androidx.fragment.app.fragment.performActivityCreated(fragment.java:2722)
位于androidx.fragment.app.FragmentStateManager.activityCreated(FragmentStateManager.java:346)
位于androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1188)
位于androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1356)
位于androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434)
位于androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1497)
位于androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2625)
位于androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2577)
位于androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:247)
位于androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:541)
在androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:210)上
位于android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1435)
位于android.app.Activity.performStart(Activity.java:8024)
位于android.app.ActivityThread.handleStartActivity(ActivityThread.java:3475)
在android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221)中
位于android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201)
位于android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173)
在android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)中
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
位于android.os.Handler.dispatchMessage(Handler.java:106)
位于android.os.Looper.loop(Looper.java:223)
位于android.app.ActivityThread.main(ActivityThread.java:7656)
位于java.lang.reflect.Method.invoke(本机方法)
位于com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
原因:java.lang.reflect.InvocationTargetException
位于java.lang.reflect.Constructor.newInstance0(本机方法)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:343)
在androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.java:267)
在androidx.lifecycle.SavedStateViewModelFactory.create(SavedStateViewModelFactory.java:106)
位于androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:185)
位于androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150)
在com.example.jirataskmvvm.view.citySelectPage.citySelectionPage.onCreateView(citySelectionPage.kt:29)上
位于androidx.fragment.app.fragment.performCreateView(fragment.java:2698)
位于androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
位于androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
位于androidx.fragment.app.FragmentManager.AddAddAddedFragments(FragmentManager.java:2224)
在androidx.fragment.app.FragmentManager.ExecutePostGether(FragmentManager.java:1997)
在androidx.fragment.app.FragmentManager.RemovedAndTopOperationsAndExecute(FragmentManager.java:1953)
位于androidx.fragment.app.FragmentManager.ExecutPendingActions(FragmentManager.java:1849)
位于androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2629)
位于androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2577)
位于androidx.fragment.app.fragment.performActivityCreated(fragment.java:2722)
位于androidx.fragment.app.FragmentStateManager.activityCreated(FragmentStateManager.java:346)
位于androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1188)
在androidx.fra
class CityRmViewModel (application: Application):AndroidViewModel(application){

    val allCities = MutableLiveData<List<CityRm>>()

    private val cityRoomRepository: CityRoomRepository

    init {
        val cityDao = EventsDatabase.getEventsDatabase(application).cityDao()
        cityRoomRepository = CityRoomRepository(cityDao)
    }

    private fun readFromDB(){
        cityRoomRepository.readAll(allCities)

    }

    fun loadData(){
        readFromDB()
    }

    private fun addCity(cityRm: CityRm){
        viewModelScope.launch(Dispatchers.IO){
            cityRoomRepository.addCity(cityRm)
        }
    }

    fun loadDataToDB(){
        val request = cityService.buildService(CityEndPoint::class.java)
        val call = request.getCities()

        call.enqueue(object : Callback<List<City>> {
            override fun onResponse(call: Call<List<City>>, response: Response<List<City>>) {
                if (response.isSuccessful) {
                    for(i in 0..response.body()!!.size){
                        val cityRm = CityRm(response.body()!![i].id,response.body()!![i].name)
                        addCity(cityRm)
                    }
                }
            }
            override fun onFailure(call: Call<List<City>>, t: Throwable) {
                Log.d("api response:", t.message.toString())
            }
        })
    }
}
class citySelectionPage : Fragment() {

    lateinit var cityViewModel: CityRmViewModel
    private val cityAdapter = cityScPageAdapter(arrayListOf())


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

        val view = inflater.inflate(R.layout.fragment_city_selection_page, container, false)

        cityViewModel = ViewModelProvider(this).get(CityRmViewModel::class.java)
        cityViewModel.loadData()


        val recyclerView = view.findViewById<RecyclerView>(R.id.cityPageRecycler)
        recyclerView.apply {
            layoutManager = LinearLayoutManager(activity)
            adapter = cityAdapter
        }

        observeViewModel()
        return view
    }

    fun observeViewModel(){
        cityViewModel.allCities.observe(viewLifecycleOwner, { cities -> cities?.let {
                cityAdapter.updateCities(it)
        }
        })
    }
}
Caused by: java.lang.IllegalStateException: Cannot access database on the main thread since it may potentially lock the UI for a long period of time.