當我使用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。任何想法是什麼原因?
嘗試在你的類 – darwin
哇它的工作原理@Keep註釋!謝謝。當應該使用@Keep批註或在proguard文件中設置規則以保留類時? – tufekoi
爲什麼這有'kotlin'標籤? –