Java 使用proguard在android上解析Gson

Java 使用proguard在android上解析Gson,java,android,gson,proguard,Java,Android,Gson,Proguard,当我使用proguard时,我只有Gson的解析问题。在调试模式和无proguard的发布模式下,一切正常 这是我的json字符串: {“表格”:[{“名称”:“概要文件”,“列”:[{“标签”:“id”,“类型”:“文本”,“主要”:true},{“标签”:“名称”,“类型”:“文本”,“标签”:“年龄”,“类型”:“整数”},{“标签”:“人”,“类型”:“整数”},{“标签”:“齿轮”,“类型”:“齿轮”,“类型”:“齿轮”,“自定义”:true,“列表”:true}]},{“名称”:“齿

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

这是我的json字符串:

{“表格”:[{“名称”:“概要文件”,“列”:[{“标签”:“id”,“类型”:“文本”,“主要”:true},{“标签”:“名称”,“类型”:“文本”,“标签”:“年龄”,“类型”:“整数”},{“标签”:“人”,“类型”:“整数”},{“标签”:“齿轮”,“类型”:“齿轮”,“类型”:“齿轮”,“自定义”:true,“列表”:true}]},{“名称”:“齿轮”,“列”:[{“标签”:“id”,“类型”:“文本”,“主要”:true},{“标签”:“类型”:“类型”:“文本”:“齿轮”,“类型”:“文本”,“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”:“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;
    }
 }
但是当我试图从我的
数据库
对象调用方法
getTables()
时:

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

我收到以下错误:
java.lang.NullPointerException:尝试调用接口方法'java.util.Iterator java.util.List.Iterator()'在一个空对象引用上。
。我已经包括了proguard的注释。知道原因是什么吗?

正如达尔文所评论的,在我的POJOs类中添加
@Keep
注释修复了这个问题。

正如达尔文所评论的,在我的POJOs类中添加
@Keep
注释修复了这个问题。

尝试在你的类中添加@Keep注释哇,这很有效!谢谢。什么时候应该使用@Keep注释或在proguard文件中设置规则来保留类?为什么这有
kotlin
标记?我的错,我删除了你的类上的ittry@Keep注释哇,这很有效!谢谢。什么时候应该使用@Keep注释或在proguard文件中设置规则来保留类?这是为什么保存
kotlin
标签?我的错,我把它删除了
for (Table table : database.getTables()) {
    //...
}