Gson различное поведение для сгенерированного apk и режима отладки - PullRequest
0 голосов
/ 30 октября 2018

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

String intervalsData = data.getString(ARG_INTERVAL, "[]");
Type intervalListType = new TypeToken<List<Interval>>() {}.getType();
List<Interval> intervalList = ConnectionUtils.dataFromString(intervalsData, intervalListType);

Вот пример данных:

"[{
  \"StartDateTime\": \"0001-01-01T00:00:00\",
  \"EndDateTime\": \"0001-01-01T00:00:00\",
  \"Interval\": \"100000.0\"
}]"

метод dataFromString:

public static <T> T dataFromString(String json, Type type) {
        Gson gson = new GsonBuilder()
                .setDateFormat(Common.DateFormatKinds.ServerDateFormat.getValue())
                .create();
        return gson.fromJson(json, type);
    }

Формат даты сервера "yyyy-MM-dd'T'HH:mm:ss"

Интервальный класс:

import java.util.Date;

public class Interval{
    public Date StartDateTime;
    public Date EndDateTime;
    public double Interval;
}

Когда я загружаю приложение из Android Studio на устройство, все работает нормально. Но когда я генерирую apk и загружаю его с помощью hockeyapp, Gson правильно анализирует массив, но поля в элементе Interval равны нулю.

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

добавьте это к правилам конфигурации ProGuard, чтобы сохранить имя класса и его открытые поля:

-keep class com.acme.Interval { public <fields>; }

с помощью аннотации @Keep обрабатывает это на уровне кода; оба метода действительны.

0 голосов
/ 31 октября 2018

Вам нужно добавить @Keep аннотацию для Interval класса, потому что proguard запутывает все классы в подписанном apk, и Gson не может проанализировать JSON для вашей модели .:

import java.util.Date;
import android.support.annotation.Keep;

@Keep
public class Interval{
    public Date StartDateTime;
    public Date EndDateTime;
    public double Interval;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...