-1

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

这是API 的响应

4

2 回答 2

0
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)
于 2021-04-30T07:39:16.373 回答
0

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

  • 检查您传递的身份验证令牌是否正确,或者您是否传递它。
  • 如果您没有在 api 标头中传递身份验证令牌,那么请传递它将解决您的错误
于 2021-04-30T06:01:51.597 回答