2016-11-29 105 views
0

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

这是我的JSON字符串:

{ “表”:[{ “Name”: “个人资料”, “列”:[{ “标签”: “ID”, “类型”:”文本”, “主”:真正},{ “标签”: “姓名”, “类型”: “文本”},{ “标签”: “年龄”, “类型”: “整数”},{ “标签” : “人”, “类型”: “整数”},{ “标记”: “齿轮”, “类型”: “齿轮”, “自定义”:真, “列表”:真}]},{ “名” : “齿轮”, “列”:[{ “标签”: “ID”, “类型”: “文本”, “主”:真},{ “标签”: “类型”, “类型”: “文本” “枚举”:真正},{ “标签”: “姓名”, “类型”: “文本”},{ “标签”: “id_Profile”, “类型”: “整数”, “foreign_key”:真正}] },{ “名称”: “动物”, “列”:[{ “标签”: “ID”, “类型”: “文本”, “主”:真},{ “标签”: “姓名”,”键入 “:” 文本 “},{” 标签 “:” 神奇”, “类型”: “整数”},{ “标签”: “id_Profile”, “类型”: “整数”, “foreign_key”:真正}] }]}

这些都是我的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); 
} 

但是,当我尝试从调用方法getTables()Database object:

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 for proguard。任何想法是什么原因?

+1

尝试在你的类 – darwin

+0

哇它的工作原理@Keep注释!谢谢。当应该使用@Keep批注或在proguard文件中设置规则以保留类时? – tufekoi

+0

为什么这有'kotlin'标签? –

回答

1

达尔文评论,添加注释@Keep我的POJO类固定问题