Отображение Gson в pojo возвращает ноль при запуске варианта релиза с включенным proguad, даже с добавленным @SerializedName - PullRequest
0 голосов
/ 28 октября 2018

Обратите внимание, что некоторые могут предложить добавить класс модели в proguard -keep, я подчеркиваю, что я не хочу этого делать из-за рекомендаций по ограничению безопасности, наложенных моим работодателем, я ищу решение, не требующее редактирования правил proguard

Используя Gson для разбора строки в формате Json в массив, сопоставленный с Pojo, все отлично работает в варианте отладки но когда в выпуске сборки с включенным proguard свойства сопоставленных объектов Pojo возвращают ноль, вызывая сбой приложения, ниже приведен класс model / pojo:

package com.xx.xxxxxxx


import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
import java.io.Serializable;

public class BeneficiaryModel implements Serializable {

    @SerializedName("beneficiaryId")
    @Expose
    private String beneficiaryId;

    @SerializedName("beneficiaryName")
    @Expose
    private String beneficiaryName;

    @SerializedName("beneficiaryType")
    @Expose
    private String beneficiaryType;

    @SerializedName("status")
    @Expose
    private String status;


    public String getBeneficiaryId() {
        return beneficiaryId;
    }


    public void setBeneficiaryId(String beneficiaryId) {
        this.beneficiaryId = beneficiaryId;
    }


    public String getBeneficiaryName() {
        return beneficiaryName;
    }


    public void setBeneficiaryName(String beneficiaryName) {
        this.beneficiaryName = beneficiaryName;
    }


    public String getBeneficiaryType() {
        return beneficiaryType;
    }


    public void setBeneficiaryType(String beneficiaryType) {
        this.beneficiaryType = beneficiaryType;
    }


    public String getStatus() {
        return status;
    }


    public void setStatus(String status) {
        this.status = status;
    }
}

и вот как я сериализую строку json в массив объектов

 Gson gson = new Gson();
clientes = gson.fromJson(beneficiaryStringJsonArray, BeneficiaryModel[].class);
models =  new ArrayList<BeneficiaryModel>(Arrays.asList(clientes));

Log.e("TAG", models.get(0).getBeneficiaryId() + "," +  models.get(0).getBeneficiaryName());
// Log returns  null , null

Вот часть ответа строки Json, которую необходимо сериализовать:

[{"beneficiaryId":"XYZ54646464646","beneficiaryName":"xxxxxxxxxxxxxx1","beneficiaryType":"","status":"ACTIVE"},{"beneficiaryId":"XYZ5468524654","beneficiaryName":"xxxxxxxxxxxxx2","beneficiaryType":"","status":"ACTIVE"}]

(как я уже говорил, все отлично работает в режиме отладки)

1 Ответ

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

Единственное решение, которое я нашел, которое сработало для меня, это использование библиотеки Джексона, мне нужно было всего лишь добавить несколько правил в мою программу, не добавляя модели или другие файлы в мое приложение.вот правила, которые вам понадобятся для Джексона

# Proguard configuration for Jackson 2.x
-keep class com.fasterxml.jackson.databind.ObjectMapper {
    public <methods>;
    protected <methods>;
}

-keep class com.fasterxml.jackson.databind.ObjectWriter {
    public ** writeValueAsString(**);
}
-keepnames class com.fasterxml.jackson.** { *; }
-dontwarn com.fasterxml.jackson.databind.**

Конечно, я все еще открыт для предложений о том, как решить проблему с помощью Gson, оцените любые предложения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...