我已经尝试了一些不同的方法,但都没有成功,所以我想换另一个库尝试,但是为了保险起见,我还是先把它放在这儿。
我的应用程序向3个不同的URL发起2个GET请求和2个POST请求,我现在遇到了最后一个的问题。
我有一个Retrofit POST方法:
@Headers({
"Accept: text/html",
"Accept-Encoding: gzip, deflate, br",
"Accept-Language: es-ES,es;q=0.8",
"Cache-Control: no-cache",
"Content-Type: application/x-www-form-urlencoded"
})
@FormUrlEncoded
@POST("index.php?operacion=consulta")
Call<String> postRaiaSearch(@Header("Cookie") String cookie, @Field("microchip") String microchip);
在我解释问题之前,我想澄清一点,我已经尝试过将
Call<String>
更改为Call<ResponseBody>
,或者将有效负载作为@Field
(使用@FormUrlEncoded
和Content-Type
标头作为application/x-www-form-urlencoded
)发送,也可以像@Body
和RequestBody
一样发送。
但是所有这些都会给我返回相同的错误格式响应。
这里是Advanced REST Client响应正常格式化的示例:
而Retrofit给我的结果如下:
您可以看到,第一个不好的事情是网站返回的是HTML而不是JSON,但我认为我可以将其作为纯文本获取,但这并没有成功。
如果您想知道,这是我创建Retrofit对象的方式:
public static Retrofit getRaiaApi() {
if (raiaRetrofit == null) {
raiaRetrofit = new Retrofit.Builder()
.baseUrl(RAIA_URL)
.addConverterFactory(ScalarsConverterFactory.create())
.build();
}
return raiaRetrofit;
}
我还尝试过添加 .addConverterFactory(GsonConverterFactory.create())
,或删除 Scalars 行(只保留 Gson 行),甚至只删除它们两个都行。
我认为你并不需要调用那个 POST 方法的方法,但是我还是会把它粘贴在这里:
private void nextRaiaSearch(String header) {
callRaiaSearch = apiInterfaceRaia.postRaiaSearch(header, chipInput);
callRaiaSearch.enqueue(new Callback<String>() {
@Override
public void onResponse(Call<String> call, Response<String> response) {
Log.v("call", "onResponse");
Log.v("call", response.body());
}
@Override
public void onFailure(Call<String> call, Throwable t) {
Log.v("call", "onFailure");
}
});
}
我应该尝试像Volley或其他东西一样来代替Retrofit处理这个请求吗?
导入的内容如下:
compile 'com.google.code.gson:gson:2.8.2'
compile 'com.squareup.retrofit2:retrofit:2.3.0'
compile 'com.squareup.retrofit2:converter-gson:2.3.0'
compile 'com.squareup.retrofit2:converter-scalars:2.3.0'
text/plain
、application/json
和application/x-www-form-urlencoded
,并为每个解决方案使用了不同的转换器。 - JMedinilla