kotlin 中的接口回调不需要类型参数
No type arguments expected for interface Callback in kotlin
val apiInterface: ApiInterface =
ApiClient().getApiClient()!!.create<ApiInterface>(ApiInterface::class.java) ?:
val call: Call<Contacts?>? = apiInterface.signUp(username, contact, password)
call.enqueue(object : Callback<Contacts?>() {
fun onResponse(call: Call<Contacts?>?, response: Response<Contacts?>) {
val value: String = response.body().getValue()
val message: String = response.body().getMassage()
if (value == "success") {
Toast.makeText(this@SignUpActivity, message, Toast.LENGTH_SHORT).show()
val intent = Intent(this@SignUpActivity, LoginActivity::class.java)
startActivity(intent)
} else if (value == "exists") {
Toast.makeText(this@SignUpActivity, message, Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(this@SignUpActivity, message, Toast.LENGTH_SHORT).show()
}
}
fun onFailure(call: Call<Contacts?>?, t: Throwable) {
Toast.makeText(this@SignUpActivity, "Error! $t", Toast.LENGTH_SHORT).show()
}
})
错误:No type arguments expected for class Call
我在 <Contacts?>
上收到上述错误我是 Kotlin 的新手所以,我不知道为什么会收到错误。
我已经从我的 Java class 转换了上面的源代码。
这是我的 Java code.
val apiInterface: ApiInterface =
ApiClient().getApiClient()!!.create<ApiInterface>(ApiInterface::class.java)
val call: retrofit2.Call<Contacts?>? = apiInterface.signUp(username, contact, password)
call?.enqueue(object : Callback<Contacts?>() {
override fun onResponse(call: retrofit2.Call<Contacts?>?, response: Response<Contacts?>) {
val value: String = response.body()?.getValue()!!
val message: String = response.body()?.getMassage()!!
if (value == "success") {
Toast.makeText(this@SignUpActivity, message, Toast.LENGTH_SHORT).show()
val intent = Intent(this@SignUpActivity, LoginActivity::class.java)
startActivity(intent)
} else if (value == "exists") {
Toast.makeText(this@SignUpActivity, message, Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(this@SignUpActivity, message, Toast.LENGTH_SHORT).show()
}
}
override fun onFailure(call: retrofit2.Call<Contacts?>?, t: Throwable) {
Toast.makeText(this@SignUpActivity, "Error! $t", Toast.LENGTH_SHORT).show()
}
})
Current error
Error :This class does not have a constructor
你能显示导入吗?
必须是 import retrofit2.Call;
而不是 smth else.
另外,需要删除第二行的?:
我建议你阅读有关 Kotlin 中的 elvis 运算符和 null 安全性(它是关于如何使用此 ?
、?:
、!!
)[ link ]
val apiInterface: ApiInterface =
ApiClient().getApiClient()!!.create<ApiInterface>(ApiInterface::class.java) ?:
val call: Call<Contacts?>? = apiInterface.signUp(username, contact, password)
call.enqueue(object : Callback<Contacts?>() {
fun onResponse(call: Call<Contacts?>?, response: Response<Contacts?>) {
val value: String = response.body().getValue()
val message: String = response.body().getMassage()
if (value == "success") {
Toast.makeText(this@SignUpActivity, message, Toast.LENGTH_SHORT).show()
val intent = Intent(this@SignUpActivity, LoginActivity::class.java)
startActivity(intent)
} else if (value == "exists") {
Toast.makeText(this@SignUpActivity, message, Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(this@SignUpActivity, message, Toast.LENGTH_SHORT).show()
}
}
fun onFailure(call: Call<Contacts?>?, t: Throwable) {
Toast.makeText(this@SignUpActivity, "Error! $t", Toast.LENGTH_SHORT).show()
}
})
错误:No type arguments expected for class Call
我在 <Contacts?>
上收到上述错误我是 Kotlin 的新手所以,我不知道为什么会收到错误。
我已经从我的 Java class 转换了上面的源代码。 这是我的 Java code.
val apiInterface: ApiInterface =
ApiClient().getApiClient()!!.create<ApiInterface>(ApiInterface::class.java)
val call: retrofit2.Call<Contacts?>? = apiInterface.signUp(username, contact, password)
call?.enqueue(object : Callback<Contacts?>() {
override fun onResponse(call: retrofit2.Call<Contacts?>?, response: Response<Contacts?>) {
val value: String = response.body()?.getValue()!!
val message: String = response.body()?.getMassage()!!
if (value == "success") {
Toast.makeText(this@SignUpActivity, message, Toast.LENGTH_SHORT).show()
val intent = Intent(this@SignUpActivity, LoginActivity::class.java)
startActivity(intent)
} else if (value == "exists") {
Toast.makeText(this@SignUpActivity, message, Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(this@SignUpActivity, message, Toast.LENGTH_SHORT).show()
}
}
override fun onFailure(call: retrofit2.Call<Contacts?>?, t: Throwable) {
Toast.makeText(this@SignUpActivity, "Error! $t", Toast.LENGTH_SHORT).show()
}
})
Current error
Error :
This class does not have a constructor
你能显示导入吗?
必须是 import retrofit2.Call;
而不是 smth else.
另外,需要删除第二行的?:
我建议你阅读有关 Kotlin 中的 elvis 运算符和 null 安全性(它是关于如何使用此 ?
、?:
、!!
)[ link ]