当前位置: 首页 > 知识库问答 >
问题:

无法创建类ViewModel kotlin的实例

孟增
2023-03-14

这是我的代码

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的实例

我可以用这个片段吗?

null

共有1个答案

常宸
2023-03-14

正如有人在这里所说:

Android room Persistent:AppDatabase_Impl不存在

解决办法是:

implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"
kapt "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"

implementation "androidx.room:room-runtime:$roomVersion"
kapt "androidx.room:room-compiler:$roomVersion"


implementation "androidx.paging:paging-runtime:$paging_version"
    
 类似资料:
  • 我正在开发一本新书android应用程序,但当我测试从logcat获取以下异常的代码时,应用程序崩溃 hread.mainRuntimeException:无法启动活动ComponentInfo{hread.java:6662}:java.lang.reflect.RuntimeException:无法创建ethod.invokeBookViewModel类的实例com.android.inter

  • 你好,我是android中MVVM的新手,正在使用livedata。我正在尝试创建viewmodel的一个实例。我觉得问题在于我没有将存储库传递给viewmodel构造函数。我一直无法创建viewmodel的实例。我不知道该怎么做这里是我的viewmodel和它的创建。

  • 我尝试了MVVM架构,实现了所有需要的类和方法。在MainActivity中创建ViewModel类的对象时,我得到以下错误的实例。 我试了一个YouTube教程中的例子。我把所有的实现都做对了。我尝试过将ViewModel类和构造函数公开,但应用程序仍然在运行时崩溃。 mainactivity.java NoteViewModel.java noteRepository.java 日志

  • 问题内容: 我希望能够通过在已实例化的对象上调用方法来创建对象的新实例。例如,我有一个对象: 我希望能够调用并拥有两个有机体类型的对象。此时我的方法如下所示: 并且我非常确定它不起作用(我甚至不确定如何测试它。我在本文中尝试了gc方法)。那么,如何使我的对象创建自己的副本,就像我创建的第一个对象(带有)一样,该副本是可访问的? 问题答案: 另一个选项-如果方法中未使用实例(): 这样可以确保生物产

  • 我在我的词典应用程序中使用了第一个刀柄,但是当我运行我的应用程序时,它会崩溃并显示此日志: 这是我的模块类:`@ Module @ InstallIn(singleton component::class)object word info Module { 这是我的主活动类,它初始化视图模型并尝试使用它: 这是我的观点模型: 问题出在哪里,怎么解决?