【发布时间】:2021-09-23 09:46:53
【问题描述】:
从前面的问题可以看出,我现在正在努力改造
从标题可以看出,我确定这不是服务器错误,因为它通常是在post man中执行的。
那么,和上次一样,大概率是我的错,但我很困惑,因为我无法捕捉到这部分的错误。
很抱歉一直发布同样的问题,但我正在尝试再次寻求帮助。真的很抱歉。
我的邮递员
改造API
private val retrofit: Retrofit = Retrofit.Builder()
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(serverIp)
.build()
val userApi: UserAPI = retrofit.create(UserAPI::class.java)
userapi(控制器)
@POST("user")
fun loginBody(
@Body loginRequest : JSONObject
) : Single<UserResponse>
用户实现
override fun loginBody(body: JSONObject): Single<UserResponse> {
return RetrofitAPI.getInstance().userApi.loginBody(body)
}
我的viewModel(调用改造api)
fun loginEvent(userId: String?, userName: String?, password: String?, phone: String?, gender: String?, age: Int?,
email: String?, provider: String?, pushNotiFl:String?, kakaoNotiFl: String?, deviceToken: String?) {
val jsonObject: JSONObject = JSONObject()
jsonObject.put("userId", userId)
jsonObject.put("userName", userName ?: JSONObject.NULL)
jsonObject.put("password", password ?: JSONObject.NULL)
jsonObject.put("phone", phone ?: JSONObject.NULL)
jsonObject.put("age", age ?: JSONObject.NULL)
jsonObject.put("email", email ?: JSONObject.NULL)
jsonObject.put("provider", provider ?: JSONObject.NULL)
jsonObject.put("pushNotiFl", pushNotiFl ?: JSONObject.NULL)
jsonObject.put("kakaoNotiFl", kakaoNotiFl ?: JSONObject.NULL)
jsonObject.put("deviceToken", deviceToken ?: JSONObject.NULL)
addDisposable(
model.loginBody(jsonObject)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
_loginResult.postValue(it)
}, {
Timber.d("response error, message : ${it.localizedMessage}")
})
)
}
我的登录活动
viewModel.loginResult.observe(this@LoginActivity, Observer {
if (it.status == 200){
Timber.d("Test Checked ${it.responseData.login.age}")
}else{
Timber.d("Test Checked error ${it.status} ")
}
})
logcat中JsonObject参数值
{"userId":"1801298504","userName":null,"password":null,"phone":null,"age":24,"email":null,"provider":null,"pushNotiFl":null,"kakaoNotiFl":null,"deviceToken":null}
我在 logcat 中的错误
loginEvent: response error, message : HTTP 500
我google了很多关于这个问题,我认为可能是服务器问题,因为错误代码,但邮递员似乎工作正常,所以我认为我发送的数据是问题。
请理解代码是脏的。我花了很多时间思考这个问题,经过了几次测试,所以我没有考虑可读性来加快速度。
【问题讨论】:
-
我认为你需要摆脱
JSONObject。这不是来自 Gson,这是您在 Retrofit 中用于序列化的 (GsonConverterFactory)。创建一个data class来模拟您希望发送的有效负载并在您的 Retrofit 调用中使用它。除此之外,添加 OkHttp 日志拦截器、Flipper 或其他一些解决方案,这样您就可以准确地看到您发送到服务器的内容。 -
commonsWare / stackoverflow.com/questions/68356733/… 我得回到我之前的问题,所以我会给你链接。如果你有时间,我会很感激你的帮助。
标签: android kotlin retrofit rx-java2