使用翻新时出现了这个奇怪的错误。
首先,我尝试使用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"}
现在使用相同的逻辑,我尝试将其转换为改型,但是跳过了GSON转换,因为它返回了意外错误,提示“ JSON未格式化”
所以我做的是回调,只是根据Retrofit的文档将其作为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>
并使用此RetrofitInstance
public static Retrofit getRetrofitInstance() {
Gson gson = new GsonBuilder()
.setLenient()
.create();
CookieManager cookieManager = new CookieManager();
cookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient defaultHttpClient = new OkHttpClient.Builder()
.cookieJar(new JavaNetCookieJar(cookieManager))
.addInterceptor(loggingInterceptor)
.addInterceptor(new ResponseInterceptor())
.build();
if (retrofit == null) {
retrofit = new retrofit2.Retrofit.Builder()
.baseUrl(BASE_URL)
.client(defaultHttpClient)
.addConverterFactory(ScalarsConverterFactory.create())
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
}
return retrofit;
}
在我的主要活动中,我将其用作
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和改造未返回相同的JSON
答案 0 :(得分:0)
可能是您将请求作为JSON正文而不是像OkHTTP请求那样作为多部分发送。
要发出Multipart请求,您可以按以下方式定义改造请求:
@POST("account/forgot")
fun resetPasswordDetails(@Part email:String): Call<ResponseBody>
然后,您可以使用电子邮件地址调用该方法,而无需创建任何JSONObject。
答案 1 :(得分:0)
基于Xavier Rubio Jansana的评论,我删除了一些标题,现在它可以正常工作。我只保留@Headers(“ Content-Type:application / json”)..非常感谢先生