Я использую Retrofit для отправки запроса POST на сервер. Тело POST должно быть в форме jdata={"key1":"value1",...}
вместе с заголовком Content-Type, установленным на application/x-www-form-urlencoded
. Я нашел аналогичный вопрос, но принятый ответ не работает .
Вот что я пробовал -
Мой интерфейс
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, а затем отправить его на сервер - person Raghunandan   schedule 08.03.2016jdata={"key1":"value1",...}
, а не{"key1":"value1",...}
- person jL4   schedule 08.03.2016requestBody
). - person jL4   schedule 08.03.2016jdata=
из тела, он вернет No Content, поэтому оба требуются. - person jL4   schedule 08.03.2016