这是我的代码
class BookmarkViewModel(app: Application) : AndroidViewModel(app) {
private val dao = BookmarkDb.get(app).bookmarkDao()
companion object {
private const val PAGE_SIZE = PagingConstants.PERPAGE
/**
* If placeholders are enabled, PagedList will report the full size but some items might
* be null in onBind method (PagedListAdapter triggers a rebind when data is loaded).
* <p>
* If placeholders are disabled, onBind will never receive null but as more pages are
* loaded, the scrollbars will jitter as new pages are loaded. You should probably disable
* scrollbars if you disable placeholders.
*/
private const val ENABLE_PLACEHOLDERS = true
}
val allBookmarks = LivePagedListBuilder(dao.allBookmarkByDatetime(), PagedList.Config.Builder()
.setPageSize(PAGE_SIZE)
.setEnablePlaceholders(ENABLE_PLACEHOLDERS)
.build()).build()
fun insert(title: String, description: String, datetime: String) = ioThread {
dao.insert(Bookmark(id = 0, title = title, description = description, datetime = datetime))
}
fun remove(bookmark: Bookmark) = ioThread {
dao.delete(bookmark)
}
}
Run Code Online (Sandbox Code Playgroud)
这是来自谷歌样本..我想:
class BookmarkListFragment : FirstFragment() {
private var viewModel: BookmarkViewModel? = null
..
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
viewModel = ViewModelProviders.of(activity!!).get(BookmarkViewModel::class.java)
...
Run Code Online (Sandbox Code Playgroud)
这是问题所在:
java.lang.RuntimeException:无法创建类com.lacas.db.room.BookmarkViewModel的实例
我可以在片段中使用它吗?
java.lang.RuntimeException:无法启动活动ComponentInfo {com.lacas.asd/com.lacas.asd.ui.activities.testtabs.TestTab2Activity}:java.lang.RuntimeException:无法创建类com.lacas.asd的实例.db.room.BookmarkViewModel在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2924)在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2985)在android.app.ActivityThread.-wrap14(ActivityThread.java)在Android.app.A.运行时android.O.Roper.loop(Looper.java:154)的android.app.A.运行时,Android.app.A活动线程中的android.app.A活动线程(运动转发代码:1024)处于android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1635) app.ActivityThread.main(ActivityThread.java:6692)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1468)at com的java.lang.reflect.Method.invoke(Native Method). android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)引起:java.lang.RuntimeException:无法创建类com.lacas.asd.db.room.BookmarkViewModel a的实例 牛逼android.arch.lifecycle.ViewModelProvider $ AndroidViewModelFactory.create(ViewModelProvider.java:207)在android.arch.lifecycle.ViewModelProvider.get(ViewModelProvider.java:134)在android.arch.lifecycle.ViewModelProvider.get(ViewModelProvider.java :102)在com.lacas.asd.ui.activities.testtabs.TestTab2Activity $ $视图模型2.invoke(TestTab2Activity.kt:在com.lacas.asd.ui.activities.testtabs.TestTab2Activity $ $视图模型34 2.invoke)(TestTab2Activity .kt:29)在com.lacas.asd.ui.activ.activities的com.lacas.asd.ui.activities.testtabs.TestTab2Activity.getViewModel(TestTab2Activity.kt)的kotlin.UnsafeLazyImpl.getValue(Lazy.kt:154). testtabs.TestTab2Activity.onCreated(TestTab2Activity.kt:45)位于android.app的android.app.Activity.performCreate(Activity.java:6912)的com.lacas.asd.base.BasePermissionsActivity.onCreate(BasePermissionsActivity.kt:34) android.app.A的android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2877)上的.Intrutrumentation.callActivityOnCreate(Instrumentation.java:1126)ctivityThread.handleLaunchActivity(ActivityThread.java:2985)在android.app.ActivityThread.-wrap14(ActivityThread.java)在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1635)在android.os.Handler.dispatchMessage( Handler.java:102)在android.app.Looper.loop(Looper.java:154)的android.app.ActivityThread.main(ActivityThread.java:6692)at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1468)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)引起:java.lang.reflect.InvocationTargetException at java.lang.reflect.Constructor.newInstance0(Native Method)at java.lang.reflect.Constructor.newInstance(Constructor.java:430)at android.arch.lifecycle.ViewModelProvider $ AndroidViewModelFactory.create(ViewModelProvider.java:199)在android.arch.lifecycle.ViewModelProvider.get(ViewModelProvider.java:134)在com.laca的android.arch.lifecycle.ViewModelProvider.get(ViewModelProvider.java:102)s.asd.ui.activities.testtabs.TestTab2Activity $ $视图模型2.invoke(TestTab2Activity.kt:34)在com.lacas.asd.ui.activities.testtabs.TestTab2Activity $ $视图模型2.invoke(TestTab2Activity.kt:29)在kotlin.UnsafeLazyImpl.getValue(Lazy.kt:154)在com.lacas.asd.ui.activities.testtabs.TestTab2Activity.getViewModel(TestTab2Activity.kt)在com.lacas.asd.ui.activities.testtabs.TestTab2Activity.onCreated( TestTab2Activity.kt:45)在android.app.Instrumentation.callActivityOnCreate(Instrumentation)的android.app.Activity.performCreate(Activity.java:6912)的com.lacas.asd.base.BasePermissionsActivity.onCreate(BasePermissionsActivity.kt:34)中的.java:1126)在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2877)在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2985)在android.app.ActivityThread.-wrap14(ActivityThread.java)在Android.app.Loo上的android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1635)位于android.os.Loo的android.os.Handler.dispatchMessage(Handler.java:102)per.loop(Looper.java:154)位于android.app.ActivityThread.main(ActivityThread.java:6692)的java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1468)在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)引起:了java.lang.RuntimeException:找不到实施com.lacas.asd.db. room.BookmarkDb.BookmarkDb_Impl不存在于android.arch.persistence.room.Room.getGeneratedImplementation(Room.java:93)android.arch.persistence.room.RoomDatabase $ Builder.build(RoomDatabase.java:630)com.lacas.asd .db.room.BookmarkDb $ Companion.get(BookmarkDb.kt:29)at com.lacas.asd.db.room.BookmarkViewModel.(BookmarkViewModel.kt:14)at java.lang.reflect.Constructor.newInstance0(Native Method) )在java.lang.reflect.Constructor.newInstance(Constructor.java:430)在android.arch.lifecycle.ViewModelProvider $ AndroidViewModelFactory.create(ViewModelProvider.java:199)在android.arch.lifecycle.ViewModelProvider.get(ViewModelProvider. Java的:134)在android.arch.lifecycle.ViewModelProvider.get(ViewModelProvider.java:102)在com.lacas.asd.ui.activities.testtabs.TestTab2Activity $视图模型$ 2.invoke(TestTab2Activity.kt:在COM 34). lacas.asd.ui.activities.testtabs.TestTab2Activity $ viewModel $ 2.invoke(TestTab2Activity.kt:29)at kotlin.UnsafeLazyImpl.getValue(Lazy.kt:154)at com.lacas.asd.ui.activities.testtabs.TestTab2Activity.getViewModel(TestTab2Activity.kt)在com.lacas.asd.ui.activities.testtabs.TestTab2Activity.onCreated(TestTab2Activity.kt:45)在com.lacas.asd.base.BasePermissionsActivity.onCreate(BasePermissionsActivity.kt:34)在Android.app.A活动中的android.app.Anstrumentation.callActivityOnCreate(Instrumentation.java:1126)上的android.app.Activity.performCreate(Activity.java:6912)上的android.app.A活动时,我发现它是android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2877). ActivityThread.handleLaunchActivity(ActivityThread.java:2985)在android.app.ActivityThread.-wrap14(ActivityThread.java)在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1635)在android.os.Handler.dispatchMessage( Handler.java:102)在android.app.Looper.loop(Looper.java:154)的android.app.ActivityThread.main(ActivityThread.java:6692)at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1468)at com.android.internal.os.ZygoteInit.main(ZygoteInit.j)AVA:1358)
lac*_*cas 10
有人在这里说:
Android room persistent:AppDatabase_Impl不存在
解决方案是:
implementation "android.arch.lifecycle:extensions:$lifecycle_version"
kapt "android.arch.lifecycle:compiler:$lifecycle_version"
implementation "android.arch.persistence.room:runtime:$room_version"
kapt "android.arch.persistence.room:compiler:$room_version"
implementation "android.arch.paging:runtime:$paging_version"
Run Code Online (Sandbox Code Playgroud)
改变 viewModel = ViewModelProviders.of(activity!!).get(BookmarkViewModel::class.java)
到 viewModel = ViewModelProviders.of(this).get(BookmarkViewModel::class.java)
此外,不要实例化viewModelto null。将其更改为lateinit var这样您不必立即实例化(但您告诉 Kotlin 您将在访问它之前实例化它)。你可以这样做:private lateinit var viewModel: BookMarkViewModel
编辑问题的根源在于Room Dependencieswhere 要么不在同一版本上,要么annotationProcessor被用来代替kapt(kapt使用 Kotlin 时需要)
| 归档时间: |
|
| 查看次数: |
6072 次 |
| 最近记录: |