Я пытаюсь отправить API через POST HashMap и API KEY, но я не могу, потому что мне нужно отправить его, как я делаю @Field («что-то») , Так что я хочу @FieldMap («мета»)Как отправить Hashmap со значением с Retrofit
Пример, как я использую поле:
@FormUrlEncoded
@POST("/api")
Call<CallBackMethod> save(@Query("apikey") String api_key,
@Field("something") String test);
Как я в настоящее время используют FieldMap, но карта поле не получает отправить, потому что API ожидает массив с именем «meta», поэтому я получаю сообщение об ошибке с сервера. Метаданные не существуют в POST. API работает. Но мне нужно отправить массив с ключами и значениями, то есть Hashmap в Java.
Я звоню этот API что-то вроде этого:
Map<String, String> meta = new HashMap<>();
meta.put("user_id", user_id);
final Api apiService = ApiClient.getAPI().create(Api.class);
Call<OtherMethod> call = apiService.getOtherMethod(API_KEY, meta);
call.enqueue(new Callback<OtherMethod>() {
@Override
public void onResponse(Call<OtherMethod> call, Response<OtherMethod> response) {
Log.d("Response Raw", response.raw() + "");
Log.d("Response Raw", response.isSuccessful() + "");
}
@Override
public void onFailure(Call<OtherMethod> call, Throwable t) {
Log.e("E: t.toString());
}
});
Другой класс, где методы:
@FromUrlEncoded
@POST("/api")
Call<OtherMethod> getOtherMethod(@Query("apikey") String api_key,
@FieldMap Map<String, String> meta);
EDIT 1:
Через некоторое Мессинг вокруг, я удалось получить meta для принятия, но теперь у меня проблемы с кодировкой. Текущий API:
@FormUrlEncoded
@POST("/api")
Call<CallBackMethod> getSomething(@Query("apikey") String api_key,
@FieldMap HashMap<String,HashMap<String,String>> meta);
Это то, что он посылает:
D/OkHttp: meta=%7Buser_id%3D431%7D
Я попытался с кодирования = истинным и ложным и тем же результатом. Это то, что он должен отправить
meta={user_id=431}
Кто-нибудь знает, как отключить кодировку?
EDIT 2: Я изменил API, поэтому я отправляю @BODY, а затем json, и он работает. Если у кого-то есть решение для главной проблемы, я тоже дам кредит.
что вопрос с '@ FieldMap'? – Blackbelt
'@ FieldMap' должен работать, если ваш сервер ожидает значение« Карта ». –
Проблема в том, что я не могу установить имя FieldMap, как я могу в поле. Сервер ожидает массив с именем meta, но я не могу установить его имя в мета. Если я отправлю его как поле, то это не карта, это строка. – WinterChilly