Я пытаюсь безуспешно использовать API на Android с помощью библиотеки Retrofit, но при использовании POSTMAN я могу видеть ожидаемые результаты.
НАСТРОЙКА ПОСЛЕЙ
-
Api url (base + controller)
-
Метод HTTP установлен на POST
-
Нажмите на ссылку from-data или x-www-form-urlencoded
-
Затем я передаю два параметра в полях ключ/значение.
НАСТРОЙКА УСТРОЙСТВА ANDROID
@POST("/GetDetailWithMonthWithCode")
void getLandingPageReport(@Query("code") String code,
@Query("monthact") String monthact,
Callback<LandingPageReport> cb);
@FormUrlEncoded
@POST("/GetDetailWithMonthWithCode")
void getLandingPageReport(@Field("code") String code,
@Field("monthact") String monthact,
Callback<LandingPageReport> cb);
Ни один из этих параметров не работает. Но я получаю {} как результат.
UPDATE
Те же настройки с использованием стандартного класса HttpClient
(и HttpPost
) отлично работают.
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(url);
List<NameValuePair> urlParameters = new ArrayList<NameValuePair>();
urlParameters.add(new BasicNameValuePair("code", "testcode"));
urlParameters.add(new BasicNameValuePair("monthact", "feb-2015"));
post.setEntity(new UrlEncodedFormEntity(urlParameters));
HttpResponse response = client.execute(post);
Почему я не могу выполнить этот запрос и получить правильный ответ в Retrofit?
ОБНОВЛЕНИЕ 2
@POST("/GetDetailWithMonthWithCode")
void getLandingPageReport(@Query("code") String code,
@Query("monthact") String monthact,
Callback<List<LandingPageReport>> cb);
@FormUrlEncoded
@POST("/GetDetailWithMonthWithCode")
void getLandingPageReport(@Field("code") String code,
@Field("monthact") String monthact,
Callback<List<LandingPageReport>>> cb);
После игры я думаю, что нашел источник проблемы. Я обновил свой модифицированный код, чтобы получить List<LandingPageReport>
. Но теперь эта ошибка возникает
retrofit.RetrofitError: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: ожидается BEGIN_ARRAY, но BEGIN_OBJECT в строке 1 столбец 2 путь $
Причина в том, что я потребляю 2 api (webapi и wcf). Весь мой другой ответ json
- это массивы объектов. [{}, {}], но в этом вызове я получил это
{
"GetDetailWithMonthWithCodeResult": [
{
"code": "test",
"field1": "test",
}
]
}
Но все же я не могу разобрать ответ.