当前位置: 首页 > 知识库问答 >
问题:

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

龙凯
2023-03-14

我是Android开发新手(6个月前开始),想从Java转向静态编程语言。我已经将我的项目转换为静态编程语言,并修复了除一个问题之外的所有问题,但我不知道如何修复它。

我正在尝试检索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())
                }
            })

}

二级数据显示页面

class DataDisplayPage : AppCompatActivity()

    fun onStartUp() {

        val jManager = JsonManager()

        jManager.fetch_data{ theJsonArray  ->
            val newData = DepData()
            newData.setCellData(theJsonArray as JSONArray)
        }
    }
}

共有1个答案

范麒
2023-03-14

到目前为止,您不能对Kotlin中定义的接口使用SAM转换。不过,你可以做一些事情来解决你的问题。

>

  • 如果您在Java中定义接口,SAM转换将开始工作,并且您当前的代码将在没有任何其他更改的情况下工作。

    如果希望使用接口作为fetch\u data方法的参数,并且希望使用Kotlin编写,则必须传入实现它的对象,这是一个稍微冗长的类似Java的解决方案:

    jmManager.fetch_data(object: OnTaskCompleted {
        override fun onTaskCompleted(theJsonArray: JSONArray) {
            // ...
        }
    })
    

    如果您想要一个很好的纯Kotlin解决方案,只需去掉接口,让函数fetch\u data取一个函数作为其参数,而不是接口(同样,您当前在数据显示页中的代码也可以处理此问题):

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

  •  类似资料:
    • 我最近使用Kotlin开发了Android应用程序,但我收到以下错误 无法推断此参数的类型。请明确指定 在我的课堂下面,我收到了错误。

    • 我需要 Kotlin 中的一个集合来仅包含实现给定接口的元素。 例如:包含动物集合的地图: 通过阅读文档、博客和SO问题,我编写了使用Generics in关键字的代码: 现在我想在Test类中添加一个读取“data”内容的方法,例如将其打印到控制台: 如果我这样做,我会遇到编译错误: 我的解决方案是强制我的动物进入一个ArrayList 但是我不确定这是编写这种代码的最好方式。有没有更好的方式告

    • 我的分类测试应用程序有一个问题,我使用了一个比较器。我收到一条信息: 线程“主”java.lang 中的异常:未解决的编译问题:无法推断排序器的类型参数 对于该代码: 分拣机类: 可比接口: id比较器类: 比较器接口: 这样用有什么错?我怎样才能做得更好?

    • 我收到此错误,并且是 Swift 的新手。我想取数组的最后 5 个点 无法将“ArraySlice”类型的值转换为预期的参数类型“[CGPoint]”

    • 我仍然在玩我的日历,我已经设法将 https://github.com/SundeepK/CompactCalendarView 整合到我的一个片段中。只剩下一个错误,我做了一些研究,其他人也遇到了问题,例如使用ArrayList 示例代码: IDE说: 注:C:...\Uebersicht.java使用或覆盖不推荐使用的API。注意:用-Xlint:deprecation重新编译以获得详细信息。

    • 我使用一个密封类从网络返回数据。但是当我在构建这个项目时,我得到了以下错误 类型推断失败:没有足够的信息来推断参数T in fun error(错误消息:String,错误:Throwable):状态请明确指定它。 我错过了什么? 这是代码