Android Studio将Java转换为Kotlin错误无法推断此参数的类型。请明确指定
我是Android开发新手(6个月前开始),我想从Java转到Kotlin。我已经将我的项目转换为Kotlin并修复了除一个问题以外的所有问题,但我不知道如何修复它 我试图检索一个JSONArray(如类JsonManager中所示),并通过方法调用在第二个名为DataDisplayPage的类中使用检索到的数据 我得到以下控制台错误,这些错误发生在第二个类的这一行:Android Studio将Java转换为Kotlin错误无法推断此参数的类型。请明确指定,android,kotlin,Android,Kotlin,我是Android开发新手(6个月前开始),我想从Java转到Kotlin。我已经将我的项目转换为Kotlin并修复了除一个问题以外的所有问题,但我不知道如何修复它 我试图检索一个JSONArray(如类JsonManager中所示),并通过方法调用在第二个名为DataDisplayPage的类中使用检索到的数据 我得到以下控制台错误,这些错误发生在第二个类的这一行:jManager.fetch_data{theJsonArray-> 无法推断此参数的类型。请显式指定它 类型不匹配:推断类型为(
jManager.fetch_data{theJsonArray->
无法推断此参数的类型。请显式指定它
类型不匹配:推断类型为(???)->单位,但应为OnTaskCompleted
一流的JsonManager
interface OnTaskCompleted {
fun onTaskCompleted(theJsonArray: JSONArray)
}
class JsonManager {
var listener: OnTaskCompleted? = null
init {
Log.d("JsonManager", "Instance created")
}
fun fetch_data(callback : OnTaskCompleted) {
listener = callback
val url ="https://someURL"
AndroidNetworking.get(url)
.build()
.getAsJSONArray(object : JSONArrayRequestListener {
override fun onResponse(response: JSONArray) {
listener?.onTaskCompleted(response)
}
override fun onError(anError: ANError) {
Log.d("error", anError.toString())
}
})
}
第二类数据显示页
class DataDisplayPage : AppCompatActivity()
fun onStartUp() {
val jManager = JsonManager()
jManager.fetch_data{ theJsonArray ->
val newData = DepData()
newData.setCellData(theJsonArray as JSONArray)
}
}
}
到目前为止,您还不能使用Kotlin中定义的接口。不过,您可以做一些事情来解决您的问题
fetch_data
方法的参数,并且希望使用Kotlin编写,则必须传入一个实现该接口的对象,这是一个稍微冗长、类似Java的解决方案:
jmManager.fetch_data(object: OnTaskCompleted {
override fun onTaskCompleted(theJsonArray: JSONArray) {
// ...
}
})
fetch_data
函数将函数作为其参数,而不是接口(同样,您在DataDisplayPage
中的当前代码将处理此问题):
fun-fetch_数据(回调:(JSONArray)->Unit){
// ...
侦听器?.onTaskCompleted(响应)
回调(响应)
// ...
}
TIL:您可以在代码块中使用HTML的SO子集。我刚才也必须查找它:P而且,只有使用
而不是缩进时,它才有效。谢谢,这对我帮助很大。我使用了建议2,并将阅读更多Kotlin文档,最终使用纯Kotlin。第三个解决方案是它被称为高阶函数。这是一个可以使用其他函数作为参数的函数。这里有文档记录:我认为阅读官方文档很重要。Kotlin的绝妙解决方案..干杯
fun fetch_data(callback: (JSONArray) -> Unit) {
// ...
listener?.onTaskCompleted(response)
callback(response)
// ...
}