当我使用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中。知道是什么原因吗?
答案 0 :(得分:1)
正如darwin评论的那样,将@Keep
注释添加到我的POJO类中解决了问题