android-studio - 我遇到这个错误 java.lang.IllegalArgumentException: 找不到类 java.lang.Object 的调用适配器
问题描述
我是 kotlin 中 MVVM 的新手,我想使用改造来获取一些数据并在 textview 中显示它,但我无法获取它。在这个应用程序中,我第一次使用的是 android jetpack 组件。我尝试了很多次,但我无法解决这个错误。我的代码在下面
MainActivity.kt
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val repository = Repository()
val viewModelFactory = MainViewModelFactory(repository)
viewModel = ViewModelProvider(this, viewModelFactory).get(MainViewModel::class.java)
viewModel.getEmployeeData()
viewModel.repoResponse.observe(this, Observer { response ->
if (response.isSuccessful) {
Log.d("Response", response.body()?.employee_id.toString())
Log.d("Response", response.body()?.employee_name.toString())
Log.d("Response", response.body()?.employee_age.toString())
Log.d("Response", response.body()?.employee_salary.toString())
name.text = response.body()?.employee_name!!
} else {
Log.d("Response", response.errorBody().toString())
name.text = response.code().toString()
}
})
}
MainViewModelFactory.kt
class MainViewModelFactory(private val repository: Repository):ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
return MainViewModel(repository) as T
}
主视图模型.kt
class MainViewModel(private val repository: Repository):ViewModel() {
val repoResponse:MutableLiveData<Response<Employee>> = MutableLiveData()
fun getEmployeeData(){
viewModelScope.launch {
val response = repository.getEmployeeData()
repoResponse.value = response
}
}
ApiClient.kt
object ApiClient {
private val retrofit by lazy{
Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build()
}
val api:Api by lazy {
retrofit.create(Api::class.java)
}
api.kt
public interface Api {
@GET("api/v1/employee/1")
suspend fun getEmployeeData():Response<Employee>
}
存储库.kt
class Repository {
suspend fun getEmployeeData():Response<Employee>{
return ApiClient.api.getEmployeeData()
}
员工.kt
data class Employee(
@SerializedName("id")
var employee_id: Int,
@SerializedName("employee_name")
var employee_name: String,
@SerializedName("employee_age")
var employee_age: Int,
@SerializedName("employee_salary")
var employee_salary: Int
)
常量.kt
class Constants {
companion object{
const val BASE_URL = "http://dummy.restapiexample.com"
}
我该如何解决这个问题?请帮我。谢谢
解决方案
Retrofit 从 2.6.4 开始只支持suspend 关键字,所以使用 2.3.0 是行不通的。
您应该更新到更新版本的 Retrofit。在撰写本文时,当前的最新版本是 2.9.0。
推荐阅读
- sequelize.js - Sequelizejs:未处理的拒绝 SequelizeDatabaseError:列 user.playerstatsId 不存在
- python - 查看以 Django 中其他列为条件的新列
- javascript - 如何知道两个透明图像是否在非透明区域相交
- python - Python - 使用 Knn 算法扩展测试数据的 Ocr
- javascript - React/JS 切换表列
- firebase - 履行 URL 在 Dialogflow 中无效 | 使用云函数
- python - unindent 不匹配任何外部缩进级别 python3.6.4
- azure-functions - 来自 CosmosDB 的 Azure 函数输入绑定:每次调用都会加载数据吗?
- python - scikit-learn 中的多输出高斯过程回归
- javascript - 过滤箭头函数 (ES6)