【发布时间】:2018-11-02 06:19:56
【问题描述】:
这是我的代码
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)
}
}
这是来自谷歌样本.. 在我想要之后:
class BookmarkListFragment : FirstFragment() {
private var viewModel: BookmarkViewModel? = null
..
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
viewModel = ViewModelProviders.of(activity!!).get(BookmarkViewModel::class.java)
...
这就是问题所在:
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.ActivityThread$H.handleMessage(ActivityThread.java:1635) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:154) 在 android.app.ActivityThread.main(ActivityThread.java:6692) 在 java.lang.reflect.Method.invoke(本机方法) 在 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.BookmarkViewModel 的实例 在 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$viewModel$2.invoke(TestTab2Activity.kt:34) 在 com.lacas.asd.ui.activities.testtabs.TestTab2Activity$viewModel$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) 在 com.lacas.asd.base.BasePermissionsActivity.onCreate(BasePermissionsActivity.kt:34) 在 android.app.Activity.performCreate(Activity.java:6912) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1126) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2877) 在 android.app.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.os.Looper.loop(Looper.java:154) 在 android.app.ActivityThread.main(ActivityThread.java:6692) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358) 引起:java.lang.reflect.InvocationTargetException 在 java.lang.reflect.Constructor.newInstance0(本机方法) 在 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$viewModel$2.invoke(TestTab2Activity.kt:34) 在 com.lacas.asd.ui.activities.testtabs.TestTab2Activity$viewModel$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) 在 com.lacas.asd.base.BasePermissionsActivity.onCreate(BasePermissionsActivity.kt:34) 在 android.app.Activity.performCreate(Activity.java:6912) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1126) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2877) 在 android.app.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.os.Looper.loop(Looper.java:154) 在 android.app.ActivityThread.main(ActivityThread.java:6692) 在 java.lang.reflect.Method.invoke(本机方法) 在 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) 在 com.lacas.asd.db.room.BookmarkViewModel.(BookmarkViewModel.kt:14) 在 java.lang.reflect.Constructor.newInstance0(本机方法) 在 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$viewModel$2.invoke(TestTab2Activity.kt:34) 在 com.lacas.asd.ui.activities.testtabs.TestTab2Activity$viewModel$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) 在 com.lacas.asd.base.BasePermissionsActivity.onCreate(BasePermissionsActivity.kt:34) 在 android.app.Activity.performCreate(Activity.java:6912) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1126) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2877) 在 android.app.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.os.Looper.loop(Looper.java:154) 在 android.app.ActivityThread.main(ActivityThread.java:6692) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
【问题讨论】:
-
java.lang.RuntimeException: cannot find implementation for com.lacas.asd.db.room.BookmarkDb. BookmarkDb_Impl