Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 改型返回未知字符_Android_Retrofit_Retrofit2 - Fatal编程技术网

Android 改型返回未知字符

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()

我在使用改装时遇到了一个奇怪的错误

首先,我尝试使用okhttpClient进行比较,我得到了预期的json结果

  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>