2016-11-29 120 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類固定問題