【发布时间】:2016-03-08 15:10:36
【问题描述】:
我正在使用 Retrofit 向服务器发送 POST 请求。 POST 的正文必须采用 jdata={"key1":"value1",...} 格式,并且 Content-Type 标头设置为 application/x-www-form-urlencoded。我发现了一个similar 问题,但接受的答案不起作用。
这是我尝试过的 -
我的界面
public interface APIHandler {
@Headers("Content-Type: application/x-www-form-urlencoded")
@FormUrlEncoded
@POST(URL)
Call<ResponseBody> getdata(@Field("jdata") String jdata);
}
调用函数
public void load() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("BASE_URL")
.addConverterFactory(GsonConverterFactory.create())
.build();
// prepare call in Retrofit 2.0
APIHandler iAPI = retrofit.create(APIHandler.class);
String requestBody = "{\"id\":\"value\",\"id1\":\"value2\"}"
Call<ResponseBody> call = iAPI.getData(requestBody);
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> c, Response<ResponseBody> response) {
if (response.isSuccess()) {
ResponseBody result = response.body();
String gs = new Gson().toJson(result);
Log.d("MainActivity", "response = " + gs + " status: " + statusCode);
} else {
Log.w("myApp", "Failed");
}
}
@Override
public void onFailure(Call<ResponseBody> c, Throwable t) {
}
});
}
但我收到了response = null 和status = 200。我究竟做错了什么?预期的响应只是一个字符串,而不是 JSON 数组。
【问题讨论】:
-
这个
{"key1":"value1",...}是一个json数据。您可以使用 gson 将 pojo 转换为 json 对象,然后将其发布到服务器 -
是的,但我需要发帖
jdata={"key1":"value1",...}而不是{"key1":"value1",...} -
检查toString方法@developer.android.com/intl/es/reference/org/json/…
-
参数已经是一个字符串(
requestBody)。 -
您是否通过邮递员查看回复?