Вот мой код
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)
}
}
Это из примеров Google .. После того, как я хочу:
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.crerovider View.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.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.rovr.jidel.j.jpg: 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.TestCab2ActivityTestTab2Activity.kt: 45) в com.lacas.asd.base.BasePermissionsActivity.onCreate (BasePermissionsActivity.kt: 34) в android.app.Activity.performCreate (Activity.java:6912) в android.app.Instrumentation.callActivityOnCreate (Инструментарий.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.rovM.Java: 134) на android.arch.lifecycle.ViewModelProvider.get (ViewModelProvider.java:102) на com.lacas.asd.ui.activities.testtabs.TestTab2Activity $ viewModel $ 2.invoke (TestTab2Activity.kt: 34) на ком.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).на 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)