当密码和确认密码输入错误时,错误响应 500 不会显示
Error Response 500 is not getting diaplayed when password and confirm password typed wrong
当密码和确认密码输入正确时,我的回复成功显示....但是当它不匹配时它不会是其他部分....不显示任何东西......请指导我。 ..需要帮助...提前致谢
这是我在邮递员中输入错误的密码和确认密码时的回复:-
{
"status": 500,
"message": "Could not reset password.",
"error": {
"confirm_password": {
"compareWith": "Passwords mismatch."
}
},
"user_msg": "Could not reset password, please try again."
}
这是我的数据类:-
1-->
data class Reset_Reponse_Base (
@SerializedName("status") val status : Int,
@SerializedName("message") val message : String,
@SerializedName("error") val error : Reset_Response_error,
@SerializedName("user_msg") val user_msg : String
)
2-->
data class Reset_Response_error (
@SerializedName("confirm_password") val confirm_password : Reset_Response_Confirm_password
)
3-->
data class Reset_Response_Confirm_password (
@SerializedName("compareWith") val compareWith : String
)
我的回复电话activity:--->
var old_password = findViewById<TextView>(R.id.old_password)
var new_password = findViewById<TextView>(R.id.new_password)
var confirm_password =
findViewById<TextView>(R.id.confirm_new_password)
val resetpwdbutton = findViewById<Button>(R.id.resetpwdbtn)
resetpwdbutton.setOnClickListener {
val old = old_password.text.toString().trim()
val new = new_password.text.toString().trim()
val confirm = confirm_password.text.toString().trim()
val token: String =
SharedPrefManager.getInstance(
applicationContext
).user.access_token.toString()
RetrofitClient.instance.resetpassword(token, old, new, confirm)
.enqueue(object : Callback<Reset_Reponse_Base> {
override fun onFailure(call: Call<Reset_Reponse_Base>, t: Throwable) {
Log.d("res", "" + t)
}
override fun onResponse(
call: Call<Reset_Reponse_Base>,
response: Response<Reset_Reponse_Base>
) {
var res = response
if (res.body()?.status == 200) {
Log.d("response check ", "" + response.body()?.status.toString())
if (res.body()?.status == 200) {
Toast.makeText(
applicationContext,
res.body()?.user_msg,
Toast.LENGTH_LONG
).show()
Log.d("kjsfgxhufb", response.body()?.user_msg.toString())
} else if (res.body()?.status == 500){
val ret: Reset_Response_error = res.body()!!.error
val ret2: Reset_Response_Confirm_password = ret.confirm_password
//confused over here-->
//toast is not getting diaplayed when password and confirm password doesnt match
try {
val jObjError =
JSONObject(response.errorBody()!!.string())
Toast.makeText(
applicationContext,
jObjError.getString("message")+jObjError.getString("user_msg"),
Toast.LENGTH_LONG
).show()
} catch (e: Exception) {
Toast.makeText(applicationContext, e.message, Toast.LENGTH_LONG).show()
Log.e("errorrr",e.message)
}
}
}
}
})
}
将此 else if (res.body()?.status == 500)
替换为 else if (!res.isSuccessful
==> 在调试器中为 false
但如果我这样做-->else if (res.errorBody()?.equals(500)!!)
我明白了 -->
这很好,但是我如何在这个 [size=176 text={"status":500,"message":"Could not reset password.","error":{"co…]
下访问 我在内容
下有错误消息
我想检索 ==> 消息":"无法重置密码。"error":{"co ......
好的,您需要阅读错误响应正文
val errorBodyBuffer = Buffer()
res.errorBody()?.writeTo(errorBodyBuffer)
val errorBodyString = errorBodyBuffer.clone().readUtf8()
现在您可以使用 Gson 或 JsonObject 来解析 errorBodyString
不检查正文响应错误代码检查
if(response.code() == 500){
val errorBody = response.errorBody()
val json = JSONObject(errorBody)
//show toast
}
您必须解析错误正文。以下代码将帮助您解析错误。
您可以创建自定义错误 class,以便您可以针对特定错误类型执行操作。两个异常class可以如下:
open class APIError: Exception() {
private val statusCode = 0
fun status(): Int {
return statusCode
}
fun message(): String? {
return message
}
}
class UnknownError : APIError() {}
错误解析器class可以如下所示。我这里使用了kotling扩展功能,方便使用。
fun Response<*>.parseError(): Throwable {
val converter: Converter<ResponseBody, APIError?> = RetrofitClient.instance
.responseBodyConverter(APIError::class.java, arrayOfNulls<Annotation>(0))
val error: APIError?
error = try {
if(errorBody() != null) {
converter.convert(errorBody())
} else {
return UnknownError("Something wrong")
}
} catch (e: IOException) {
return APIError()
}
return Throwable(error)
}
最后在改造 onResponse()
方法中,你可以这样做:
RetrofitClient.instance.resetpassword(token, old, new, confirm)
.enqueue(object : Callback<Reset_Reponse_Base> {
override fun onFailure(call: Call<Reset_Reponse_Base>, t: Throwable) {
Log.d("res", "" + t)
}
override fun onResponse(
call: Call<Reset_Reponse_Base>,
response: Response<Reset_Reponse_Base>
) {
var res = response
if(response.isSuccessful) {
if (res.body().status == 200) {
Log.d("response check ", "" + response.body()?.status.toString())
if (res.body()?.status == 200) {
Toast.makeText(
applicationContext,
res.body()?.user_msg,
Toast.LENGTH_LONG
).show()
Log.d("kjsfgxhufb", response.body()?.user_msg.toString())
} else if (res.body()?.status == 500) {
val ret: Reset_Response_error = res.body()!!.error
val ret2: Reset_Response_Confirm_password = ret.confirm_password
//confused over here-->
//toast is not getting diaplayed when password and confirm password doesnt match
try {
val jObjError =
JSONObject(response.errorBody()!!.string())
Toast.makeText(
applicationContext,
jObjError.getString("message") + jObjError.getString("user_msg"),
Toast.LENGTH_LONG
).show()
} catch (e: Exception) {
Toast.makeText(applicationContext, e.message, Toast.LENGTH_LONG).show()
Log.e("errorrr", e.message)
}
}
}
} else {
val error = res.parseError()
// do your stuffs with error
}
}
})
当密码和确认密码输入正确时,我的回复成功显示....但是当它不匹配时它不会是其他部分....不显示任何东西......请指导我。 ..需要帮助...提前致谢
这是我在邮递员中输入错误的密码和确认密码时的回复:-
{
"status": 500,
"message": "Could not reset password.",
"error": {
"confirm_password": {
"compareWith": "Passwords mismatch."
}
},
"user_msg": "Could not reset password, please try again."
}
这是我的数据类:-
1-->
data class Reset_Reponse_Base (
@SerializedName("status") val status : Int,
@SerializedName("message") val message : String,
@SerializedName("error") val error : Reset_Response_error,
@SerializedName("user_msg") val user_msg : String
)
2-->
data class Reset_Response_error (
@SerializedName("confirm_password") val confirm_password : Reset_Response_Confirm_password
)
3-->
data class Reset_Response_Confirm_password (
@SerializedName("compareWith") val compareWith : String
)
我的回复电话activity:--->
var old_password = findViewById<TextView>(R.id.old_password)
var new_password = findViewById<TextView>(R.id.new_password)
var confirm_password =
findViewById<TextView>(R.id.confirm_new_password)
val resetpwdbutton = findViewById<Button>(R.id.resetpwdbtn)
resetpwdbutton.setOnClickListener {
val old = old_password.text.toString().trim()
val new = new_password.text.toString().trim()
val confirm = confirm_password.text.toString().trim()
val token: String =
SharedPrefManager.getInstance(
applicationContext
).user.access_token.toString()
RetrofitClient.instance.resetpassword(token, old, new, confirm)
.enqueue(object : Callback<Reset_Reponse_Base> {
override fun onFailure(call: Call<Reset_Reponse_Base>, t: Throwable) {
Log.d("res", "" + t)
}
override fun onResponse(
call: Call<Reset_Reponse_Base>,
response: Response<Reset_Reponse_Base>
) {
var res = response
if (res.body()?.status == 200) {
Log.d("response check ", "" + response.body()?.status.toString())
if (res.body()?.status == 200) {
Toast.makeText(
applicationContext,
res.body()?.user_msg,
Toast.LENGTH_LONG
).show()
Log.d("kjsfgxhufb", response.body()?.user_msg.toString())
} else if (res.body()?.status == 500){
val ret: Reset_Response_error = res.body()!!.error
val ret2: Reset_Response_Confirm_password = ret.confirm_password
//confused over here-->
//toast is not getting diaplayed when password and confirm password doesnt match
try {
val jObjError =
JSONObject(response.errorBody()!!.string())
Toast.makeText(
applicationContext,
jObjError.getString("message")+jObjError.getString("user_msg"),
Toast.LENGTH_LONG
).show()
} catch (e: Exception) {
Toast.makeText(applicationContext, e.message, Toast.LENGTH_LONG).show()
Log.e("errorrr",e.message)
}
}
}
}
})
}
将此 else if (res.body()?.status == 500)
替换为 else if (!res.isSuccessful
==> 在调试器中为 false
但如果我这样做-->else if (res.errorBody()?.equals(500)!!)
我明白了 -->
这很好,但是我如何在这个 [size=176 text={"status":500,"message":"Could not reset password.","error":{"co…]
下访问 我在内容
下有错误消息
我想检索 ==> 消息":"无法重置密码。"error":{"co ......
好的,您需要阅读错误响应正文
val errorBodyBuffer = Buffer()
res.errorBody()?.writeTo(errorBodyBuffer)
val errorBodyString = errorBodyBuffer.clone().readUtf8()
现在您可以使用 Gson 或 JsonObject 来解析 errorBodyString
不检查正文响应错误代码检查
if(response.code() == 500){
val errorBody = response.errorBody()
val json = JSONObject(errorBody)
//show toast
}
您必须解析错误正文。以下代码将帮助您解析错误。
您可以创建自定义错误 class,以便您可以针对特定错误类型执行操作。两个异常class可以如下:
open class APIError: Exception() {
private val statusCode = 0
fun status(): Int {
return statusCode
}
fun message(): String? {
return message
}
}
class UnknownError : APIError() {}
错误解析器class可以如下所示。我这里使用了kotling扩展功能,方便使用。
fun Response<*>.parseError(): Throwable {
val converter: Converter<ResponseBody, APIError?> = RetrofitClient.instance
.responseBodyConverter(APIError::class.java, arrayOfNulls<Annotation>(0))
val error: APIError?
error = try {
if(errorBody() != null) {
converter.convert(errorBody())
} else {
return UnknownError("Something wrong")
}
} catch (e: IOException) {
return APIError()
}
return Throwable(error)
}
最后在改造 onResponse()
方法中,你可以这样做:
RetrofitClient.instance.resetpassword(token, old, new, confirm)
.enqueue(object : Callback<Reset_Reponse_Base> {
override fun onFailure(call: Call<Reset_Reponse_Base>, t: Throwable) {
Log.d("res", "" + t)
}
override fun onResponse(
call: Call<Reset_Reponse_Base>,
response: Response<Reset_Reponse_Base>
) {
var res = response
if(response.isSuccessful) {
if (res.body().status == 200) {
Log.d("response check ", "" + response.body()?.status.toString())
if (res.body()?.status == 200) {
Toast.makeText(
applicationContext,
res.body()?.user_msg,
Toast.LENGTH_LONG
).show()
Log.d("kjsfgxhufb", response.body()?.user_msg.toString())
} else if (res.body()?.status == 500) {
val ret: Reset_Response_error = res.body()!!.error
val ret2: Reset_Response_Confirm_password = ret.confirm_password
//confused over here-->
//toast is not getting diaplayed when password and confirm password doesnt match
try {
val jObjError =
JSONObject(response.errorBody()!!.string())
Toast.makeText(
applicationContext,
jObjError.getString("message") + jObjError.getString("user_msg"),
Toast.LENGTH_LONG
).show()
} catch (e: Exception) {
Toast.makeText(applicationContext, e.message, Toast.LENGTH_LONG).show()
Log.e("errorrr", e.message)
}
}
}
} else {
val error = res.parseError()
// do your stuffs with error
}
}
})