【问题标题】:Gson parsing on android with proguard使用proguard在android上解析Gson
【发布时间】:2016-11-29 09:59:13
【问题描述】:

当我使用 proguard 时,我只有 Gson 的解析问题。在没有 proguard 的调试模式和发布模式下,一切正常。

这是我的 json 字符串:

{"tables":[{"name":"Profile","columns":[{"label":"id","type":"text","primary":true},{"label ":"name","type":"text"},{"label":"age","type":"integer"},{"label":"human","type":"integer"} ,{"label":"gear","type":"Gear","custom":true,"list":true}]},{"name":"Gear","columns":[{"label ":"id","type":"text","primary":true},{"label":"type","type":"text","enum":true},{"label": "name","type":"text"},{"label":"id_Profile","type":"integer","foreign_key":true}]},{"name":"Animal","columns ":[{"label":"id","type":"text","primary":true},{"label":"name","type":"text"},{"label": "magic","type":"integer"},{"label":"id_Profile","type":"integer","foreign_key":true}]}]}

这些是我的 POJO:

public class Database {
    private List<Table> tables;

    public List<Table> getTables() {
        return tables;
    }

    public void setTables(List<Table> tables) {
        this.tables = tables;
    }
}

public class Table {
    private String name;
    private List<Column> columns;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<Column> getColumns() {
        return columns;
    }

    public void setColumns(List<Column> columns) {
        this.columns = columns;
    }
 }

我读取了包含 json 字符串的文件并以这种方式解析它:

public Database getDatabase(Context context) throws IOException {
    InputStream stream = context.getAssets().open(PATH);
    String schema = getJsonSchema(stream);
    Gson gson = new Gson();
    return gson.fromJson(schema, Database.class);
}

但是当我尝试从我的Database 对象调用方法getTables() 时:

for (Table table : database.getTables()) {
    //...
}

我收到此错误:java.lang.NullPointerException: Attempt to invoke interface method 'java.util.Iterator java.util.List.iterator()' on a null object reference。我已将那些rules 包括在proguard 中。知道是什么原因吗?

【问题讨论】:

  • 在你的班级尝试@Keep注解
  • 哇它好用!谢谢。什么时候应该使用 @Keep 注释或在 proguard 文件中设置规则来保留类?
  • 为什么会有kotlin标签?
  • 我的错,我删除了它

标签: java android gson proguard


【解决方案1】:

正如 darwin 所说,将 @Keep 注释添加到我的 POJO 类中解决了问题

【讨论】:

    猜你喜欢
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多