【问题标题】:No definition found for class:'com.saehyun.mcss.ui.SearchViewModel'. Check your definitions! Error找不到类的定义:'com.saehyun.mcss.ui.SearchViewModel'。检查你的定义!错误
【发布时间】:2022-01-01 21:25:42
【问题描述】:

我尝试使用 Koin 作为我的 D.I 来实现权限注入但是,执行视图模型时发生错误。

2021-11-23 18:50:20.144 9408-9408/com.saehyun.mcss E/AndroidRuntime: 致命异常: main 进程:com.saehyun.mcss,PID:9408 java.lang.RuntimeException:无法启动活动 ComponentInfo{com.saehyun.mcss/com.saehyun.mcss.feature.search.ui.SearchActivity}:org.koin.core.error.NoBeanDefFoundException:找不到类的定义:' com.saehyun.mcss.ui.SearchViewModel'。检查你的定义! 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3449)

这是错误代码

基础应用

package com.saehyun.mcss.di

import android.app.Application
import com.saehyun.mcss.di.module.searchModule
import org.koin.android.ext.koin.androidContext
import org.koin.android.ext.koin.androidFileProperties
import org.koin.android.ext.koin.androidLogger
import org.koin.core.context.startKoin
import org.koin.dsl.module

class McssApplication : Application() {
    override fun onCreate() {
        super.onCreate()

        startKoin {
            androidContext(this@McssApplication)

            module {
                searchModule
            }

        }
    }
}

搜索模块

package com.saehyun.mcss.di.module

import com.saehyun.mcss.data.search.SearchRepository
import com.saehyun.mcss.feature.search.viewmodel.SearchViewModel
import org.koin.androidx.viewmodel.dsl.viewModel
import org.koin.dsl.module

val searchModule = module {
    factory { SearchRepository() }
    viewModel { SearchViewModel(get()) }
}

搜索库

package com.saehyun.mcss.data.search

import com.saehyun.mcss.data.searchApi
import com.saehyun.mcss.feature.search.model.McsrvstatusResponse
import retrofit2.Response

class SearchRepository {

    suspend fun serverInfo(serverIp: String) : Response<McsrvstatusResponse> {
        return searchApi.serverInfo(serverIp)
    }

}

搜索视图模型

package com.saehyun.mcss.feature.search.viewmodel

import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.saehyun.mcss.data.search.SearchRepository
import kotlinx.coroutines.launch

class SearchViewModel(
    private val repository: SearchRepository
    ) : ViewModel() {

    val toastMessage : MutableLiveData<String> = MutableLiveData()

    fun serverInfo(serverId: String) {
        viewModelScope.launch {
            val response = repository.serverInfo(serverId)

            if(response.isSuccessful) {
                toastMessage.value = "성공"
            } else {
                toastMessage.value = "실패"
            }
        }
    }

}

【问题讨论】:

    标签: android kotlin dependency-injection runtime-error koin


    【解决方案1】:

    只需在您的settings.gradle 文件中添加jcenter() 存储库,然后同步项目。像这样,

    dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
        jcenter()
        maven { url "https://www.jitpack.io" }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-10
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多