燃料在出错时得到身体反应

时间:2018-05-03 07:37:44

标签: android kotlin

我怎样才能做到这一点?这是我正在做的请求。

Error   C2526   'GetStaffMap': C linkage function cannot return C++ class 'std::map<int,std::string,std::less<int>,std::allocator<std::pair<const _Kty,_Ty>>>'  AmsCppRest  c:\users\laptop-attendance\source\repos\amscpprest\amscpprest\staff.h   18  

Error   C2556   'std::map<int,std::string,std::less<int>,std::allocator<std::pair<const _Kty,_Ty>>> Staffs::GetStaffMap(void)': overloaded function differs only by return type from 'void Staffs::GetStaffMap(void)'   AmsCppRest  c:\users\laptop-attendance\source\repos\amscpprest\amscpprest\staff.cpp 38  

Error   C2371   'Staffs::GetStaffMap': redefinition; different basic types  AmsCppRest  c:\users\laptop-attendance\source\repos\amscpprest\amscpprest\staff.cpp 38  

我得到的回应是:

Fuel.get(url)
    .timeout(TIMEOUT)
    .body(myRequest.parameters!!, Charsets.UTF_8)
    .responseString() { _, response, result ->
                Log.e("result", "$result")
                when (result) {
                    is Result.Success -> {
                        completionHandler(result.get(), null)
                    }
                    is Result.Failure -> {
                        Log.e("fail", "${response}")
                        completionHandler(null, Error(response.responseMessage))
                    }
                }
            }

我想将正文消息作为我的错误返回。

4 个答案:

答案 0 :(得分:2)

issue中已提及。您可以使用response.data接收正文,并返回ByteArray。因此,代码可能如下所示:

val myBody = String(response.data)

另一种解决方案是禁用HTTP Code validator,可以通过以下方法实现:FuelManager.removeAllResponseInterceptors()

答案 1 :(得分:0)

无论如何我解决了它将消息子串出来。但Fuel是一个受人尊敬的图书馆,所以有可能是另一种更好看的方式。但它的工作是:)

答案 2 :(得分:0)

如果您的代码使用awaitByteArrayResponse并获得了Result<?, FuelError>>FuelError对象,请尝试以下操作: val (content, error) = result // Result<?, FuelError>> val strContent = error.errorData.toString(Charsets.UTF_8)

答案 3 :(得分:0)

我偶然发现了同一问题,并做了以下工作以使错误消息脱离响应正文:

// Body : ({"message":"Not allowed to do this!"})
val errorMessage = Json(String(error.response.data)).obj().getString("message")

不幸的是,我没有看到更优雅的方法,因为在Fuel的源代码中,body属性被声明为内部属性。