gpt4 book ai didi

java - 如何将改造回调响应中的回调从 java 转换为 Kotlin

转载 作者:行者123 更新时间:2023-12-02 10:30:01 27 4
gpt4 key购买 nike

我是 Kotlin 的新手,我有一个简单的问题:我将所有项目从 java 转换为 kotlin,并成功使用文档纠正了所有错误。

但是我没有成功将 java Retrofit 回调响应中的回调转换为 kotlin。

fun getUserAccountController(token: String, callback: UtilsCallback): Users {

userAccountServices.getUserAccount(token).enqueue(object : Callback<Result> {
override fun onResponse(call: Call<Result>, response: Response<Result>) {
if (response.isSuccessful) {
Log.i("Callback TOKEN ok ==> ", response.body()!!.resultUser!!.name)
user.name = response.body()!!.resultUser!!.name
user.username = response.body()!!.resultUser!!.username

callback.onData(user) // ==> Here my CALLBACK function
} else {
user.username = ""
user.name = ""
callback.onData(user) // ==> Here my CALLBACK function
}
}

override fun onFailure(call: Call<Result>, t: Throwable) {
Log.i("Callback TOKEN Nok ==> ", "error")
}
})
return user
}

我的回调是函数callback.onData

   Handler().postDelayed({
user = userAccountController.getUserAccountController(token) {
fullName!!.text = user.name
firstName!!.text = user.name
email!!.text = user.username
}
}, 50)
}

它通过上面的代码转换我的代码,我不明白为什么。

下面是错误消息:

Kotlin code showing 'type mismatch' error

也许,我必须使用另一种方式?在该示例中,我的目的是从成功的异步响应中获取数据,以便更新我的 Activity 。

感谢您的阅读。

编辑

我还发布了我之前运行良好的 JAVA 代码

new Handler().postDelayed(new Runnable(){
@Override
public void run(){
user = userAccountController.getUserAccountController(token, new UtilsCallback() {
@Override
public void onData(Users userBack) {
fullName.setText(user.getName());
firstName.setText(user.getName());
email.setText(user.getUsername());
}
});
}
},50);
}

编辑 2 @Roland 建议的我的新 kotlin 代码

    Handler().postDelayed({
user = userAccountController.getUserAccountController(token, UtilsCallback {
fullName!!.text = user.name
firstName!!.text = user.name
email!!.text = user.username
})
}, 50)
}

Kotlin code showing 'interface does not have constructors' error

编辑 3:我的 kotlin 界面

    package com.util.my3ciapplication

import com.model.my3ciapplication.Users

interface UtilsCallback {

fun onData(user: Users)
}

最佳答案

实际上它在图片中说明了...您使用 () -> Unit 并且您应该使用 UtilsCallback 代替...

可能以下内容已经可以工作:

Handler().postDelayed({
user = userAccountController.getUserAccountController(token, UtilsCallback {
fullName!!.text = user.name
firstName!!.text = user.name
email!!.text = user.username
})
}, 50)

或者至少解决方案可能与此非常相似。

更新:我假设那是一个 Java 接口(interface)...对于您的第二个错误,请同时查看 Kotlin: Interface ... does not have constructors .

在这种特定情况下,我宁愿将您的 UtilsCallback 替换为类似的适当的功能对应项,例如() -> 单位

关于java - 如何将改造回调响应中的回调从 java 转换为 Kotlin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53666391/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com