Используйте Enum для десериализации объекта из ответа сервиса в Android Java - PullRequest
0 голосов
/ 01 мая 2018

Я получил метод enum в классе Enums.java, как показано ниже:

public enum Country
{
    @SerializedName("Germany")
    Germany,
    @SerializedName("Australia")
    Australia,
    @SerializedName("Canada")
    Canada;

    @Override
    public String toString()
    {
        return super.toString();
    }
}

Затем я получил объект, один из его атрибутов Enums.Country, как показано ниже:

@SerializedName("CountryName")
private Enums.Country countryName;

...
get
set

Как правило, название страны возвращается из сервисного вызова. Однако на данный момент объект обрабатывает только 3 страны, а именно Германия, Австралия и Канада. Если это что-то еще, оно будет нулевым. Как я могу избежать этого?

Спасибо.

1 Ответ

0 голосов
/ 01 мая 2018

это относительно просто, просто определите значение Неизвестно в своем классе следующим образом:

public enum Country
{
    Unknown(Unknown"),
    @SerializedName("Germany")
    Germany,
    @SerializedName("Australia")
    Australia,
    @SerializedName("Canada")
    Canada;
}

Затем напишите пользовательский десериализатор для этого типа Enum и проанализируйте этот Enum, используя его. Например, код десериализатора с использованием GSON будет выглядеть так:

JsonDeserializer<Country> deserializer = new JsonDeserializer<Country>() {
    @Override
    public Country deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        try {
            return Country.valueOf(json.getAsString());
        } catch (Exception e){
            return Country.Unknown;
        }
    }
};
...