Android Studio convirtiendo Java en error de Kotlin No se puede inferir un tipo para este parámetro. Por favor especifíquelo explícitamente

Soy nuevo en el desarrollo de Android (comenzó hace 6 meses) y me gustaría pasar de Java a Kotlin. He convertido mi proyecto en Kotlin y solucioné todos los problemas excepto uno y no puedo resolver cómo solucionarlo.

Estoy tratando de recuperar un JSONArray (como se ve en la class JsonManager) y utilizar los datos recuperados en una segunda class llamada DataDisplayPage a través de una llamada a un método.

Recibo los siguientes errores de console, que ocurren en esta línea de la segunda class: jManager.fetch_data{ theJsonArray -> .

No se puede inferir un tipo para este parámetro. Por favor especifíquelo explícitamente.

Tipo no coincidente: tipo inferido es (???) -> Unidad, pero se esperaba OnTaskCompleted

JsonManager de primera class

 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()) } }) } 

Segunda class DataDisplayPage

 class DataDisplayPage : AppCompatActivity() fun onStartUp() { val jManager = JsonManager() jManager.fetch_data{ theJsonArray -> val newData = DepData() newData.setCellData(theJsonArray as JSONArray) } } } 

A partir de ahora, no puede usar la conversión SAM para las interfaces definidas en Kotlin. Sin embargo, hay un par de cosas que puedes hacer para resolver tu problema.

  1. Si define su interfaz en Java, la conversión de SAM comenzará a funcionar y su código actual funcionará sin ningún otro cambio.

  2. Si desea utilizar una interfaz como parámetro del método fetch_data , y desea que se escriba en Kotlin, tendrá que pasar un object que la implemente, que es una solución ligeramente verbosa, similar a Java:

     jmManager.fetch_data(object: OnTaskCompleted { override fun onTaskCompleted(theJsonArray: JSONArray) { // ... } }) 
  3. Si quieres una buena solución pura de Kotlin, simplemente deshazte de la interfaz y fetch_data function fetch_data tome una function como su parámetro en lugar de la interfaz (de nuevo, tu código actual en DataDisplayPage funcionará con esto):

     fun fetch_data(callback: (JSONArray) -> Unit) { // ... listener?.onTaskCompleted(response) callback(response) // ... } 

  • Ejecute la testing de expreso varias veces
  • Kotlin: método no puede ser utilizado con generics
  • Excepción de puntero nulo en Spring Proxy Class y Kotlin
  • Definición del tamaño a un tipo de matriz personalizada en Android Kotlin
  • Akka stream, upstream no produce valores
  • La ejecución de Android falló para la tarea app.compileDebugKotlin cuando se usa firebase
  • Kotlin: ¿Qué puedo hacer cuando una biblioteca Java tiene una sobrecarga de tipo primitivo y encuadrado?
  • Arquitectura limpia: ¿Utiliza diferentes classs de model para diferentes fonts de datos?
  • ¿Puede elegir la versión de Android Studio kotlin?
  • Android Studio / Kotlin: error no válido "El método de anulación debería llamarse super"
  • Agregar una configuration 'proporcionada' a una biblioteca de kotlin / java usando gradle