kotlin - 在数据类中改造响应 null
问题描述
我是 Kotlin 的新手。我的第一个项目是使用一个 rest api。我已经通过改造做到了这一点。但是当我记录响应时遇到问题,我的数据类为空。我不知道错误在哪里。
我的改装客户
object RetrofitClient {
var retrofit: Retrofit? = null
fun getClient(baseUrl: String): Retrofit? {
if (retrofit == null) {
//TODO While release in Google Play Change the Level to NONE
val interceptor = HttpLoggingInterceptor()
interceptor.level = HttpLoggingInterceptor.Level.BODY
val client = OkHttpClient.Builder()
.addInterceptor(interceptor)
.connectTimeout(100, TimeUnit.SECONDS)
.readTimeout(100, TimeUnit.SECONDS)
.build()
retrofit = Retrofit.Builder()
.client(client)
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create())
.build()
}
return retrofit
}
}
我的界面
public interface ApiLoginService {
@POST("UserManagementCoreAPI/api/v1/users")
fun loginService(@Body request: RequestBody): Call<DataLogin>
}
object ApiUtils {
val BASE_URL = "------"
val apiLoginService: ApiLoginService
get() = RetrofitClient.getClient(BASE_URL)!!.create(ApiLoginService::class.java)
}
我的班级资料
data class DataLogin (
@SerializedName("employeeId") val employeeId : String,
@SerializedName("fullName") val fullName : String,
@SerializedName("loginConfins") val loginConfins : String,
@SerializedName("branchId") val branchId : String,
@SerializedName("isActive") val isActive : String
)
主要活动
mApiLoginService!!.loginService(requestBody).enqueue(object : Callback<DataLogin>{
override fun onResponse(call: Call<DataLogin>, response: Response<DataLogin>) {
if(response.isSuccessful()){
if(response.body().toString() == null){
Log.d(tag,"Null")
}else{
Log.d(tag,"Logging In " + response.body()!!)
progressBar.visibility = View.GONE
btn_submit.visibility = View.VISIBLE
startActivity(Intent(this@MainActivity, HomeActivity::class.java))
}
}else{
Toast.makeText(applicationContext, "Invalid username or password", Toast.LENGTH_LONG).show()
Log.d(tag,"Error " + response.errorBody().toString())
progressBar.visibility = View.GONE
btn_submit.visibility = View.VISIBLE
}
}
override fun onFailure(call: Call<DataLogin>, t: Throwable) {
progressBar.visibility = View.GONE
btn_submit.visibility = View.VISIBLE
}
})
我的回复日志
message: Logging In DataLogin(employeeId=null, fullName=null, loginConfins=null, branchId=null, isActive=null)
我不知道错误在哪里以及为什么我的数据为空。如果响应成功仍然给我null。
这是一个邮递员的例子
解决方案
您的架构有问题,您的 DataLogin 类与您的邮递员架构不同,Retrofit 正在等待:fullName,isActive ....,响应是:header,data ..,您必须创建包含 header 的类作为类型变量Header(errors:List<AnotherClass>)
,数据作为类型变量Data(data(List<DataLogin>),totalRecord:Int)
,我建议如果你使用像JSON 到 Class这样的帮助网站,在那里解析你的邮递员响应,他会给你正确的响应类,但它会在 java 中,你必须重写只需将代码复制粘贴到 android studio 中,他就会为您将代码转换为 Kotlin。(在网站中,检查源类型:JSON)
推荐阅读
- python - 如何将 python 脚本的结果传递到命令行?
- excel - 使用 Dictionary 时需要错误 424 对象
- javascript - 如何删除 html 表中的重复条目
- excel - Excel 中所谓的空单元格中的幽灵数据(COUNTA 可能是罪魁祸首)
- java - ArrayList 带字符串的冒泡排序
- python - 当 2 个值最频繁时计数器
- c++ - CRTP 和虚函数开销方法调用
- python - 从字典中提取值
- node.js - 如何在 mongoDB 中进行左连接/查找以返回每个组织中用户 ID 的计数?
- python - 在 plt.imshow() 中将 alpha 设置为数组会使绘图崩溃