Правильный класс для конвертации JSON

175
13 апреля 2017, 16:39

Подскажите пожалуйста пытаюсь с ЯндексПереводчика получать список поддерживаемых языков. Сам ответ с сервера приходит в таком виде:

{
"dirs": [
    "ru-en",
    "ru-pl",
    "ru-hu",
    ...
],
"langs": {
    "ru": "русский",
    "en": "английский",
    "pl": "польский",
    ...
  }
}

Взяв за основу ответ с сервера http://www.jsonschema2pojo.org Я подготовил следующие классы:

import java.util.HashMap;
import java.util.List;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class LanguageDictionareResponse {
    @SerializedName("dirs")
    @Expose
    private List<String> dirs = null;
    @SerializedName("langs")
    @Expose
    private HashMap<CodeLanguage, Language> langs = null;
    public List<String> getDirs() {
        return dirs;
    }
    public void setDirs(List<String> dirs) {
        this.dirs = dirs;
    }
    public HashMap<CodeLanguage, Language> getLangs() {
        return langs;
    }
    public void setLangs(HashMap<CodeLanguage, Language> langs) {
        this.langs = langs;
    }
}
public class CodeLanguage {
    private String code;
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
}
public class Language {
    private String lang;
    public String getLang() {
        return lang;
    }
    public void setLang(String lang) {
        this.lang = lang;
     }
}

Интерфейс:

public interface ApiDictionare {
    @FormUrlEncoded
    @POST("api/v1.5/tr.json/getLangs")
    Call<LanguageDictionareResponse> languageDictionare(@FieldMap Map<String, String> map);
}

Вызов:

private void createRequestLanguageDictionare(){
    Call<LanguageDictionareResponse> call = apiDictionare.languageDictionare(mapJson);
    final Gson gson = new GsonBuilder().create();
    call.enqueue(new Callback<LanguageDictionareResponse>() {
        @Override
        public void onResponse(Call<LanguageDictionareResponse> call, Response<LanguageDictionareResponse> response) {
            try {
                if (response.isSuccessful()){
                    response.body().toString();
                } else {
                    error();
                }
            } catch (Exception e) {
                e.printStackTrace();
                error();
            }
        }
        @Override
        public void onFailure(Call<LanguageDictionareResponse> call, Throwable t) {
            error();
        }
    });
}

При дебаге List dirs возвращается заполненный, а HashMap langs = null. Я так понимаю, что не верно разбираю приходящий с сервера JSON объект.

READ ALSO
Изменение MouseWheelListener c помощью javassist

Изменение MouseWheelListener c помощью javassist

Есть скомпилированное java приложение без исходных кодовТребуется изменить реакцию программы на движение колёсиком мыши

191
Стоит ли вызывать ServerSocket в потоке-демоне?

Стоит ли вызывать ServerSocket в потоке-демоне?

Пишу небольшое клиент-серверное приложение с использованием сокетовПоявился вопрос

193
FirebaseRecyclerAdapter добавить последний элемент

FirebaseRecyclerAdapter добавить последний элемент

Как сделать так чтоб при добавлении новых элементов в список, последний элемент, который там есть не изменялся и при нажатии на него открылось...

209