【问题标题】:No type arguments expected for interface Callback in kotlinkotlin 中的接口回调不需要类型参数
【发布时间】:2021-06-12 13:25:21
【问题描述】:
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 我在 &lt;Contacts?&gt; 上收到上述错误我是 Kotlin 的新手所以,我不知道为什么我会收到错误。

我已经从我的 Java 类转换了上面的源代码。 这是我的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

错误:This class does not have a constructor

【问题讨论】:

  • 为什么第一行末尾有?:
  • @ADM 当我添加 Java 源代码时,它会自动生成......哦!我实际上不需要那个..我已经删除了,但是我的问题还没有解决...
  • 尝试删除构造函数调用 () Callback() 到 Callback 和 val 调用:retrofit2.Call? = apiIn ...... call?.enqueue(object : Callback {

标签: android kotlin retrofit okhttp


【解决方案1】:

你能显示进口吗? 必须是import retrofit2.Call; 而不是其他的。

另外,需要删除第二行的?:

我建议你阅读 Kotlin 中的 elvis 运算符和 null 安全性(关于如何使用这个 ??:!![ link ]

【讨论】:

  • import okhttp3.Callback import okhttp3.Response
  • 但是你需要import retrofit2.Callback;import retrofit2.Response;
  • 是的!我添加了import retrofit2.Callback import retrofit2.Response
  • 按照你说的做,我遇到了新的错误...@Rahul Patilcomment 部分说了一些话,但是我不明白他的意思..
  • 我知道我已经从 Callback&lt;Contacts?&gt;() 中删除了 ()...问题已解决... :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-06
  • 2021-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-04
  • 1970-01-01
相关资源
最近更新 更多