Gson使用proguard在android上解析

时间:2016-11-29 09:59:14

标签: java android gson proguard

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

这是我的json字符串:

  

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

这些是我的POJO:

this.http.get(url,  {
                        headers: {'Content-Type': 'image/jpg'},
                        responseType: ResponseContentType.Blob
                    })
        .map(res => {
            return new Blob([res._body], {
                type: res.headers.get("Content-Type")
            });
        })
        .map(blob => {
            var urlCreator = window.URL;
            return  this.sanitizer.bypassSecurityTrustUrl(urlCreator.createObjectURL(blob));
        })

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

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;
    }
 }

但是当我尝试从我的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

我收到此错误:for (Table table : database.getTables()) { //... } 。我已将rules包含在proguard中。知道是什么原因吗?

1 个答案:

答案 0 :(得分:1)

正如darwin评论的那样,将@Keep注释添加到我的POJO类中解决了问题