将Java转换为Kotlin错误的Android Studio无法推断此参数的类型.请明确说明

前端之家收集整理的这篇文章主要介绍了将Java转换为Kotlin错误的Android Studio无法推断此参数的类型.请明确说明前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我是 Android开发的新手(6个月前开始),并希望从Java迁移到Kotlin.我已将我的项目转换为Kotlin并修复了所有问题,但我无法弄清楚如何修复它.

我正在尝试检索JSONArray(如类JsonManager中所示)并通过方法调用在名为DataDisplayPage的第二个类中使用检索到的数据.

我得到以下控制台错误,发生在第二类的这一行:jManager.fetch_data {theJsonArray – >.

Cannot infer a type for this parameter. Please specify it explicitly.

Type mismatch: inferred type is (???) -> Unit but OnTaskCompleted was expected

第一类JsonManager

  1. interface OnTaskCompleted {
  2. fun onTaskCompleted(theJsonArray: JSONArray)
  3. }
  4.  
  5. class JsonManager {
  6. var listener: OnTaskCompleted? = null
  7.  
  8. init {
  9. Log.d("JsonManager","Instance created")
  10. }
  11.  
  12. fun fetch_data(callback : OnTaskCompleted) {
  13. listener = callback
  14. val url ="https://someURL"
  15.  
  16. AndroidNetworking.get(url)
  17. .build()
  18. .getAsJSONArray(object : JSONArrayRequestListener {
  19. override fun onResponse(response: JSONArray) {
  20. listener?.onTaskCompleted(response)
  21. }
  22.  
  23. override fun onError(anError: ANError) {
  24. Log.d("error",anError.toString())
  25. }
  26. })
  27.  
  28. }

第二类DataDisplayPage

  1. class DataDisplayPage : AppCompatActivity()
  2.  
  3. fun onStartUp() {
  4.  
  5. val jManager = JsonManager()
  6.  
  7. jManager.fetch_data{ theJsonArray ->
  8. val newData = DepData()
  9. newData.setCellData(theJsonArray as JSONArray)
  10. }
  11. }
  12. }

解决方法

截至目前,您不能将 SAM conversion用于Kotlin中定义的接口.但是,您可以采取一些措施来解决问题.

>如果您使用Java定义界面,SAM转换将开始工作,您当前的代码将无需任何其他更改即可运行.
>如果你想使用一个接口作为fetch_data方法的参数,并且你希望它在Kotlin中编写,你必须传入一个实现它的对象,这是一个稍微冗长,类似于Java的解决方案:

  1. jmManager.fetch_data(object: OnTaskCompleted {
  2. override fun onTaskCompleted(theJsonArray: JSONArray) {
  3. // ...
  4. }
  5. })

>如果你想要一个不错的纯Kotlin解决方案,只需要摆脱界面,并让fetch_data函数将一个函数作为参数而不是接口(再次,你在DataDisplayPage中的当前代码将使用它):

  1. fun fetch_data(callback: (JSONArray) -> Unit) {
  2. // ...
  3. listener?.onTaskCompleted(response)
  4. callback(response)
  5. // ...
  6. }

猜你在找的Java相关文章