我今天刚尝试在Kotlin开发一个关于使用Volley从任何网站获取数据的新应用程序。我在创建{{teasers}}
实例时遇到问题而我不知道如何解决它。
创建对象StringRequest
和Response.Listener<String>
时出现此错误:
该课程没有构造函数
代码如下:
Response.ErrorListener
提前谢谢。
答案 0 :(得分:2)
当您创建实现接口的对象时,不需要花括号()
,因为接口没有构造函数。另一方面,当您创建一个扩展类的对象时,需要花括号。例如:
interface MyListener {
fun success()
}
abstract class MyAbstractClass {
abstract fun fail()
}
//Create an object which extends MyAbstractClass and implements MyListener
val impl = object: MyAbstractClass(), MyListener {
override fun success() { TODO() }
override fun fail() { TODO() }
}
因此,您需要删除Response.Listener
和Response.ErrorListener
的大括号:
val stringRequest = StringRequest(Request.Method.GET, url,
object: Response.Listener<String> {
override fun onResponse(response:String) {
// Display the first 500 characters of the response string.
textView.setText("Response is: " + response.substring(0, 500))
}
}, object: Response.ErrorListener {
override fun onErrorResponse(error:VolleyError) {
textView.setText("That didn't work!")
}
})
由于Response.Listener
和Response.ErrorListener
是SAM type在Java中定义且Kotlin支持SAM conversions,因此您可以通过以下方式简化代码:
val stringRequest = StringRequest(Request.Method.GET, url,
Response.Listener<String> {
response ->
// Display the first 500 characters of the response string.
textView.setText("Response is: " + response.substring(0, 500))
}, Response.ErrorListener {
error ->
textView.setText("That didn't work!")
})
//Or even
val stringRequest = StringRequest(Request.Method.GET, url,
Response.Listener<String> {
// Display the first 500 characters of the response string.
textView.setText("Response is: " + it.substring(0, 500))
}, Response.ErrorListener {
textView.setText("That didn't work!")
})
注意:目前Kotlin中定义的接口不支持SAM转换。