繁体   English   中英

Retrofit put 方法调用更新项目但在 android 中给出错误的 400 响应代码

[英]Retrofit put method call update the item but give 400 response code in error in android

我正在使用 Retrofit 更新一些信息。 信息在数据库中更新。 但我收到 400 错误代码作为响应。 同时 API 在 postman 中完美运行。 我已仔细检查是否发送了所需的标头和每次登录时都会更新的 API 令牌。 但是在更新信息时,我仍然收到 400 错误。

这是API 的响应

您收到 401 作为状态代码,这意味着您正在传递未经授权的令牌或身份验证令牌有问题

  • 检查您传递的身份验证令牌是否正确,或者您是否传递它。
  • 如果您没有在 api header 中传递身份验证令牌,请传递它将解决您的错误
this is api module class     

  var token = ""
            if (prefs.contains(Constants.TOKEN_VALUE)) {
                prefs.read(Constants.TOKEN_VALUE)?.let {
                    token = it
                }
            }
    
            val httpInterceptor = HttpLoggingInterceptor()
            httpInterceptor.level = httpLoggingLevel
    
            val okHttp = OkHttpClient.Builder()
                    .addInterceptor(httpInterceptor).addInterceptor { chain ->
                        val requestBuilder = chain.request().newBuilder()
                        requestBuilder.addHeader("Accept", "application/json")
                        requestBuilder.addHeader("Cache-Control", "no-cache")
                        requestBuilder.addHeader("Content-Type", "application/x-www-form-urlencoded")
    
                        if (token.isNotEmpty() && Constants.apitokenheader==0) {
                            requestBuilder.addHeader("Authorization", token)
                            Log.d("apitoken", "providesBaseApiService: $token")
                        }
                        chain.proceed(requestBuilder.build())
                    }
                    .addInterceptor { chain ->
                        val request = chain.request()
                        val response = chain.proceed(request)
                        when(response.code()){
                            200, 201 -> response
                            204 -> response.newBuilder().code(200).body(ResponseBody.create(MediaType.get("application/json"), "1")).build()
                            else -> {
                                try {
                                    response.body()?.byteStream()?.readBytes()?.toString(Charset.defaultCharset())?.let {
                                        val obj = JSONObject(it)
                                        val opt = obj.optString("message", "An error occurred, Please try again.")
                                        Log.v("error message", opt)
                                        Log.v("error message1", request.url().toString())
                                        Log.v("error message2", response.code().toString())
    
                                        val link = request.url().uri().toString()
                                        val sub : String = link.substringAfterLast("v1")
                                        Log.v("DripInventory", sub)
                                        Log.v("DripInventory", link.indexOf("v1").let { if (it == -1) null else link.substring(it + 1) })
    //                                    link.indexOf("v1").let { if (it == -1) null else link.substring(it + 1) }
    
                                        //response.newBuilder().code(422).message(opt).build()
                                        response.newBuilder().code(response.code().toInt())
                                                .message("Please contact Drip Inventory." +
                                                        "\n " +
                                                        "\nResponse Code: ${response.code()}" +
                                                        "\n " +
                                                        "\nApi Call: $sub")
                                                .build()
    
                                    }
                                }catch (e: Exception){
                                    response
                                }
                            }
                        }
                        /*if (response.code() == 204) {
                            response.newBuilder().code(200).body(ResponseBody.create(MediaType.get("application/json"), "1")).build()
                        } else {
                            response
                        }*/
                    }
                    .hostnameVerifier{hostname, session ->
                        if (hostname == "dripinventory.com") return@hostnameVerifier true
                        if (hostname == "invalid.demo.dripinventory.com") return@hostnameVerifier true
                        Log.v("hostname", hostname)
                        true
                    }
                    .build()
    
            val gson = GsonBuilder()
                    // Serializers
                    .registerTypeAdapter(CreateAssetRequest::class.java, CreateAssetRequestSerializer())
                    .registerTypeAdapter(UpdateAssetRequest::class.java, UpdateAssetRequestSerializer())
                    // Deserializers
                    .registerTypeAdapter(AssetRaw::class.java, AssetRawDeserializer())
                    .create()
    
            val retrofit = Retrofit.Builder()
                    .client(okHttp)
                    .baseUrl(baseUrl)
                    .addConverterFactory(GsonConverterFactory.create(gson))
                    .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                    .build()
    
            return retrofit.create(CcAssetManagerApi::class.java)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM