将Java转换为Kotlin错误的Android Studio无法推断此参数的类型.
我是
Android开发的新手(6个月前开始),并希望从Java迁移到Kotlin.我已将我的项目转换为Kotlin并修复了所有问题,但我无法弄清楚如何修复它.
我正在尝试检索JSONArray(如类JsonManager中所示)并通过方法调用在名为DataDisplayPage的第二个类中使用检索到的数据. 我得到以下控制台错误,发生在第二类的这一行:jManager.fetch_data {theJsonArray – >.
第一类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()) } }) } 第二类DataDisplayPage class DataDisplayPage : AppCompatActivity() fun onStartUp() { val jManager = JsonManager() jManager.fetch_data{ theJsonArray -> val newData = DepData() newData.setCellData(theJsonArray as JSONArray) } } } 解决方法
截至目前,您不能将
SAM conversion用于Kotlin中定义的接口.但是,您可以采取一些措施来解决问题.
>如果您使用Java定义界面,SAM转换将开始工作,您当前的代码将无需任何其他更改即可运行. jmManager.fetch_data(object: OnTaskCompleted { override fun onTaskCompleted(theJsonArray: JSONArray) { // ... } }) >如果你想要一个不错的纯Kotlin解决方案,只需要摆脱界面,并让fetch_data函数将一个函数作为参数而不是接口(再次,你在DataDisplayPage中的当前代码将使用它): fun fetch_data(callback: (JSONArray) -> Unit) { // ... (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |