kotlin 返回空值的改型响应正文

kd3sttzy  于 2022-11-25  发布在  Kotlin
关注(0)|答案(1)|浏览(172)

我已经被这个问题困扰了一段时间了,我似乎找不到问题所在,尤其是当我所做的只是在网上遵循一个指南的时候。
我尝试发出POST请求,并在交换中收到响应:

请求正文:

{
    "Email":"test@gmail.com",
    "firebaseUid":"Test_UID",
    "IsBanned":1
}

响应正文:"'

{
    "Email": "test@gmail.com",
    "UserId": 7
}

因此,基本上,每当我向/users/提交创建帐户的请求时,我都会得到返回的电子邮件和UserId。

data class UserLogin(
    @SerializedName("Email") val Email: String,
    @SerializedName("UserId") val UserId: Int?,
    @SerializedName("IsBanned") val IsBanned: Boolean?,
    @SerializedName("firebaseUid") val firebaseUid: String?
)


object ServiceBuilder {
        private val client = OkHttpClient.Builder().build()

        private val retrofit = Retrofit.Builder()
            .baseUrl("http://10.0.2.2/8000/")
            .addConverterFactory(GsonConverterFactory.create())
            .client(client)
            .build()

        fun<T> buildService(service: Class<T>): T{
            return retrofit.create(service)
        }
}

class RestApiService {
    fun addUser(userData: UserLogin, onResult: (UserLogin?) -> Unit){
        val retrofit = ServiceBuilder.buildService(RestApi::class.java)
        retrofit.addUser(userData).enqueue(
            object : Callback<UserLogin> {
                override fun onFailure(call: Call<UserLogin>, t: Throwable) {
                    Log.d("Failed retrofit",t.message.toString())
                    onResult(null)

                }
                override fun onResponse( call: Call<UserLogin>, response: Response<UserLogin>) {
                    val addedUser = response.body()
                    onResult(addedUser)

                }
            }
        )
    }

}

onFailure似乎没有在控制台上打印任何东西。我从这样一个按钮调用API,Email和UserId由于某种原因一直返回null:
`

val apiService = RestApiService()
val userInfo = UserLogin(UserId = null,firebaseUid = "TestTestTest", IsBanned = false, Email = "test@gmail.com");

apiService.addUser(userInfo){
    Log.d("Retrofit user added", it?.Email.toString())
}

`
我竭力想:

  • 设置数据类成员的默认值。
  • 尝试检查响应是否成功,如果不成功,则打印errorBody。这也没有帮助。我得到了$1@9afe35d之类的不可读错误。

当我用 Postman 手动处理请求时,一切似乎都工作正常。

smtd7mpg

smtd7mpg1#

原来代码里什么都没有,只是输入端口的方式不对,用了/而不是:

private val retrofit = Retrofit.Builder()
        .baseUrl("http://10.0.2.2:8000/") // this
        .addConverterFactory(GsonConverterFactory.create())
        .client(client)
        .build()

相关问题