簡體   English   中英

使用 Kotlin 在 Android 中使用 Volley 發送用於授權的標頭

[英]Sending a header for authorization with Volley in Android using Kotlin

我正在嘗試通過在提交注​​冊詳細信息后發送到他們的電子郵件的驗證碼來驗證用戶。

我有以下代碼來收聽通過電子郵件收到的代碼/pin,但我不確定我是否以正確的方式添加標頭/承載令牌,因為我在驗證時收到服務器錯誤。

請協助


        var codeEntered:String? = null

        txt_pin_entry.setOnPinEnteredListener {
            codeEntered = "$it"
            Toast.makeText(context!!.applicationContext, "inside $codeEntered", Toast.LENGTH_SHORT).show()
        }

        submitBtn.setOnClickListener {


            val url = "https://fathomless-badlands-69782.herokuapp.com/api/auth/verify"
            val params = HashMap<String, String?>()
            params["Authorization"] = "Bearer $tokenCode"
            params["code"] = codeEntered


            Toast.makeText(context!!.applicationContext, "outside $codeEntered", Toast.LENGTH_SHORT).show()


            val jsonObject = JSONObject(params as Map<*, *>)

            val request = JsonObjectRequest(Request.Method.PUT, url, jsonObject,
                Response.Listener { response ->
                    try{
                        Log.i("Registration", "Response $response")

                    }catch (e: Exception){
                        Log.e("Registration", "Response $e")
                        Toast.makeText(context!!.applicationContext, "Response $response", Toast.LENGTH_SHORT).show()
                    }
                }, Response.ErrorListener {
                    Log.e("Registration", "Response $it")
                    Toast.makeText(context!!.applicationContext, "Response $it", Toast.LENGTH_SHORT).show()
                })



            VolleySingleton.getInstance(context!!.applicationContext).addToRequestQueue(request)
            val actionToVerificationResult = CodeVerificationFragmentDirections.actionToVerificationResult()
            Navigation.findNavController(it).navigate(actionToVerificationResult)
        }

    }

API 需要如下請求

{
  code: String
}

你在下面試過這個嗎

override fun getHeaders(): MutableMap<String, String> {
            val headers = HashMap<String, String>()
            headers["code"] = Your code
            return headers
        }

例子:

class ServiceVolley : ServiceInterface {
    val TAG = ServiceVolley::class.java.simpleName
    val basePath = "https://your/backend/api/"

    override fun post(path: String, params: JSONObject, completionHandler: (response: JSONObject?) -> Unit) {
        val jsonObjReq = object : JsonObjectRequest(Method.POST, basePath + path, params,
                Response.Listener<JSONObject> { response ->
                    Log.d(TAG, "/post request OK! Response: $response")
                    completionHandler(response)
                },
                Response.ErrorListener { error ->
                    VolleyLog.e(TAG, "/post request fail! Error: ${error.message}")
                    completionHandler(null)
                }) {
            @Throws(AuthFailureError::class)
            override fun getHeaders(): Map<String, String> {
                val headers = HashMap<String, String>()
                headers.put("Content-Type", "application/json")
                return headers
            }
        }

        BackendVolley.instance?.addToRequestQueue(jsonObjReq, TAG)
    }
}

返回標頭或覆蓋 getHeaders

  val request = JsonObjectRequest(Request.Method.PUT, url, jsonObject,
            Response.Listener { response ->
                try{
                    Log.i("Registration", "Response $response")

                }catch (e: Exception){
                    Log.e("Registration", "Response $e")
                    Toast.makeText(context!!.applicationContext, "Response $response", Toast.LENGTH_SHORT).show()
                }
            }, Response.ErrorListener {
                Log.e("Registration", "Response $it")
                Toast.makeText(context!!.applicationContext, "Response $it", Toast.LENGTH_SHORT).show()
            }){
   @Throws(AuthFailureError::class)
        override fun getHeaders(): Map<String, String> {
            val headers = HashMap<String, String>()
            headers.put("Content-Type", "application/json")
            headers.put("Authorization", "Bearer $tokenCode")
            return headers
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM