Android 改型返回未知字符
我在使用改装时遇到了一个奇怪的错误 首先,我尝试使用okhttpClient进行比较,我得到了预期的json结果Android 改型返回未知字符,android,retrofit,retrofit2,Android,Retrofit,Retrofit2,我在使用改装时遇到了一个奇怪的错误 首先,我尝试使用okhttpClient进行比较,我得到了预期的json结果 val requestBody = MultipartBody.Builder() .setType(MultipartBody.FORM) .addFormDataPart("email", "my.email@email.com") .build() val request = Request.Builder()
val requestBody = MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("email", "my.email@email.com")
.build()
val request = Request.Builder()
.url(BASE_URL + "account/forgot")
.post(requestBody)
.build()
var client = OkHttpClient()
client.newCall(request).execute()
.use { response ->
val response = response.body()!!.string()
}
返回
{"success": true, "email": "my.email@email.com", "uu_id": "000-0--0-0-000"}
现在,使用相同的逻辑,我尝试将其转换为Reformation,但跳过了GSON转换,因为它返回了一个意外错误,即“JSON未格式化”
所以我所做的是回调,只是根据改造的文档将其作为ResponseBody返回
@Headers("token: ", "accept-language: en-US", "accept: application/json", "accept-encoding: gzip, deflate, br", "Content-Type: application/json")
@POST("account/forgot")
fun resetPasswordDetails(@Body body:String): Call<ResponseBody>
在我的主要活动中,我把它当作
val service = RetrofitClientInstance.getRetrofitInstance().create(GetDataService::class.java)
val jsonBody = JSONObject()
jsonBody.put("email", "my.email@email.com")
val call = service.resetPasswordDetails(jsonBody.toString())
val response = call.execute()
val value = response.body()?.string()
我希望得到与我在okHttp上所做的相同的结果,但返回字符串是
���������������-�A
�0E�Rf)M1mc�+o"���)�ED�{��>��>PW"�.ݳ��w��Q����u�Ib�ȃd���x�/\r���@95s)�Eo���h�S����jbc���̚���� �������
我的改装实例有什么问题吗?为什么它在okhttp上工作,而不是在改造上
编辑:
我的问题被标记为重复,但我认为这不是同一个问题。虽然另一个声明问题与URL编码有关,但我的问题是,为什么okhttpclient和Reformation不返回相同的JSON,可能是您将请求作为JSON主体发送,而不是像OkHTTP请求那样的多部分发送 要提出多部分请求,您可以如下定义改装请求:
@POST("account/forgot")
fun resetPasswordDetails(@Part email:String): Call<ResponseBody>
@POST(“帐户/忘记”)
fun resetPasswordDetails(@Part email:String):调用
然后,您可以使用电子邮件地址调用该方法,而无需创建任何JSONObject。根据Xavier Rubio Jansana的评论,我删除了一些标题,现在它工作正常。我只保留@Headers(“内容类型:application/json”)。。非常感谢先生@Arty我想这不是同一个问题。另一个说问题与URL编码有关,而我的问题是,为什么okhttpclient和Reformation不返回相同的JSON。您可以控制服务器吗?可能是请求发送不正确,服务器用错误编码的故障数据进行响应。@JensV我无法控制web服务器。我尝试使用postman,它返回一个有效的json对象以及okhttpclient。此未知字符仅在我使用改型时显示。我已经尝试在头文件中添加字符集UTF-8,但仍然不起作用。这与JSON看起来并不相似。一些想法:服务器使用ProtoBuffers或类似的协议进行应答;响应是gzip编码的,但由于某些原因,Reformation或OkHttp无法对其进行解码(也许删除您添加的一些头会有所帮助,因为这通常由Reformation自动处理)。@Xavier您的评论是正确的。我只需要删除我的一些标题,它的工作。
@POST("account/forgot")
fun resetPasswordDetails(@Part email:String): Call<ResponseBody>