android - 尝试使用 RetrofitClient 登录用户时回调类型不匹配 kotlin
问题描述
我试图创建一个用户必须登录的应用程序,并且我正在按照在线教程使用改造客户端,但是即使我正在遵循的教程做了同样的事情并且工作正常,我仍然收到类型不匹配错误。
这是我在我的 LoginActivity 类中用于在用户单击按钮后登录用户的代码:
private fun successfulLogIn(email: String, password: String) {
val name = et_name.text.toString().trim()
RetrofitClient.instance.logUserIn(email, password, name)
.enqueue(object : Callback<LoginResponse>{
//If login fails
override fun onFailure(call: Call<LoginResponse>, t: Throwable) {
Toast.makeText(applicationContext, t.message, Toast.LENGTH_LONG).show()
}
//If login is successful
override fun onResponse(call: Call<LoginResponse>, response: Response<LoginResponse>) {
if(!response.body()?.error!!){
val intent = Intent(applicationContext, HomePageActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
startActivity(intent)
}else{
Toast.makeText(applicationContext, response.body()?.message, Toast.LENGTH_LONG).show()
}
}
})
}
这是我的 LoginResponse 类:
package com.example.minimoneybox.models
data class LoginResponse(val BearerToken: String, val ExternalSessionId: String, val SessionExternalId: String, val ExpiryInSeconds: Int)
这是我的 RetrofitClient 类:
package com.example.minimoneybox.api
import android.util.Base64
import okhttp3.OkHttpClient
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
object RetrofitClient {
private val AUTH = "Basic "+ Base64.encodeToString("belalkhan:123456".toByteArray(), Base64.NO_WRAP)
private const val BASE_URL = "https://api-test01.moneyboxapp.com/"
private val okHttpClient = OkHttpClient.Builder()
.addInterceptor { chain ->
val original = chain.request()
val requestBuilder = original.newBuilder()
.addHeader("Authorization", AUTH)
.method(original.method(), original.body())
val request = requestBuilder.build()
chain.proceed(request)
}.build()
val instance: Api by lazy{
val retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(okHttpClient)
.build()
retrofit.create(Api::class.java)
}
}
最后这是我的 Api 课程
package com.example.minimoneybox.api
import com.example.minimoneybox.models.LoginResponse
import retrofit2.Call
import retrofit2.http.Field
import retrofit2.http.FormUrlEncoded
import retrofit2.http.POST
interface Api {
@FormUrlEncoded
@POST("/user/login")
fun logUserIn(
@Field("Email") email: String,
@Field("Password") password: String,
@Field("Idfs") idfa: String
):Call<LoginResponse>
}
我不断得到:
类型不匹配。必需:回调<LoginResponse!>! 成立:
对于 .enqueue() 中的successfulLogIn() 函数,我该如何解决这个问题,以便能够让用户登录?
谢谢
解决方案
推荐阅读
- sql - 大数据集的中位数,之前可以聚合吗?
- java - Maven 项目继承:无法解析来自父项目的导入
- python - 如何根据多个属性对列表项进行排序,而最后一个优先级是字母?
- javascript - 是否可以用线条或不是矩形的画布制作带有背景的画布?
- python-3.x - 为什么在 python 中使用求和方程只显示 0 个值
- c# - DateTime.ToString(String, IFormatProvider) 不适用于 Xamarin.Forms 中的波斯文 CultureInfo“fa-IR”
- java - Java中使用DAO模式的多对多关系
- r - 如果输入通过,updateTabItems 在模块中不起作用
- c# - 在 chrome C# 中更改下载的文件名
- c# - 使用 Grid 在多列上显示项目