首页 > 解决方案 > 在数据类中改造响应 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。

这是一个邮递员的例子 在此处输入图像描述

标签: kotlinretrofit2

解决方案


您的架构有问题,您的 DataLogin 类与您的邮递员架构不同,Retrofit 正在等待:fullName,isActive ....,响应是:header,data ..,您必须创建包含 header 的类作为类型变量Header(errors:List<AnotherClass>),数据作为类型变量Data(data(List<DataLogin>),totalRecord:Int),我建议如果你使用像JSON 到 Class这样的帮助网站,在那里解析你的邮递员响应,他会给你正确的响应类,但它会在 java 中,你必须重写只需将代码复制粘贴到 android studio 中,他就会为您将代码转换为 Kotlin。(在网站中,检查源类型:JSON)


推荐阅读