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