【发布时间】: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