当前位置: 首页 > 知识库问答 >
问题:

错误响应500在密码和确认密码键入错误时不被拨号

端木令雪
2023-03-14

我的响应成功显示密码和确认密码键入正确....但是当它不匹配时,它不会去其他部分....没有显示吐司任何东西...请指导我...需要帮助...提前致谢

这是我的回复,当密码和确认密码输入错误在邮递员:-

{
"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
 )

我的响应呼叫活动:---

 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)
                            }
                        }

                    }
                }
            })
    }

替换此< code>else if (res.body()?。status = = 500) by < code > else if(!RES . issue successful = =

但如果我这么做-

我得到这个 -

我想检索==

共有3个答案

韩彦君
2023-03-14

好的,所以你需要阅读错误响应

    val errorBodyBuffer = Buffer()
    res.errorBody()?.writeTo(errorBodyBuffer)
    val errorBodyString = errorBodyBuffer.clone().readUtf8()

现在,您可以使用Gson或JsonObject来解析errorBodyString

卞轶
2023-03-14

不检查身体响应错误代码检查

if(response.code() == 500){
  val errorBody = response.errorBody()
  val json = JSONObject(errorBody)
  //show toast
}
濮宇定
2023-03-14

您必须解析错误主体。以下代码将帮助您分析错误。

您可以创建自定义错误类,以便可以对特定错误类型执行操作。两个异常类可以如下所示:

open class APIError: Exception() {
    private val statusCode = 0
    fun status(): Int {
        return statusCode
    }

    fun message(): String? {
        return message
    }
}

class UnknownError : APIError() {}

错误分析器类可以如下所示。我在这里使用了Koling扩展函数来轻松使用它。

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
                    }
                }
            })
 类似资料:
  • 我正在尝试解密服务器上的加密字符串。但当我解密的时候,我发现了错误。我需要成功解密字符串。我们正在使用AES 256 cbc 当我使用aes/cbc/nopadding时,我能够解密,但是文本中附加了垃圾字符。 解密A:2:{S:5:“电子邮件”;S:24:“afroj.alam@broc.com”;S:8:“密码”;S:7:“test123”;} 实际字符串A:2:{S:5:“email”;S:

  • null 整个代码块: 代码主要摘自:http://www.bjw.co.nz/developer/misc/82-general-dev/1203-decrypting-a-saml-encrypted-assertion

  • 问题内容: 节点无法创建用于SSL通信的安全上下文。 具体来说,我正在尝试让远程通知在iOS上运行。我使用了一个名为node-apn的模块,该模块引发以下错误: 不过,这似乎是一个通用错误,并且与APN并没有真正的关系。 问题答案: 这是因为您在生成证书时指定了密码。该密码必须由任何想要使用的人提供。 将通行短语字段添加到凭据即可解决此问题。

  • 我的目标是生成一个证书,在文件中导出并在JDK密钥库中导入。 在第一步中,我使用以下命令生成了一个自签名证书,将密码作为keystore和key的“password”提供: 在第二步中,我使用类似的密码和以下命令导出证书: 现在! 我正在尝试在JDK中导入cacerts中的证书,使用类似的口令和以下命令,但得到异常。 错误 k:\java\certification>keytool-importc

  • 问题内容: 我正在使用静态方法在类中使用javax.crypto加密和解密消息。我有2个使用cipher和dcipher的静态方法,以完成他们应该做的事情,我需要初始化一些变量(也是静态的)。但是,当我尝试使用它时,我得到的InvalidKeyException与我提供给ecipher.init(…)的参数。我找不到原因。这是代码: 问题答案: AES-256(和AES-192)要求为JRE安装无

  • 问题内容: 我的目标是生成证书,将其导出到文件中,然后导入JDK密钥库中。 在第一步中,我使用以下命令生成了一个自签名证书,为密钥库和密钥提供密码作为“密码”: 在第二步中,我使用类似的密码和以下命令导出了证书: 现在! 我正在尝试使用类似的密码和以下命令在JDK中的cacerts中导入此证书,但出现异常。 错误 K:\ java \ certificates> keytool -importce