如何解决我面临这个错误 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
}
Mainviewmodel.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>
}
Repository.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。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。