私はproguardを使うとGsonの解析に問題があります。 proguardのないデバッグモードとリリースモードでは、すべて正常に動作します。proguardを使ってandroidでGsonを解析する
これは私のJSON文字列です:
{ "テーブル":[{ "名": "プロフィール"、 "列":[{ "ラベル": "ID"、 "タイプ":」 {"label": "name"、 "type": "text"}、{"label": "age"、 "type": "integer"}、{"label" "ギア"、 "カスタム":真、 "リスト":真}}}、{"名前"} "人間"、 "タイプ" "タイプ"、 "タイプ"、 "テキスト"、 "プライマリ":真、{"ラベル": "タイプ"、 "テキスト" 、 "enum":true}、{"label": "name"、 "type": "text"}、{"label": "id_Profile"、 "type": "integer"、 "foreign_key":true}] {"label": "name"、 "name"、 "name"} {{"label": "id"、 "type": "text"、 "primary" {"label": "magic"、 "type": "integer"}、{"label": "id_Profile"、 "type": "integer"、 "foreign_key":true}] }]}
これらは私の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
オブジェクト:
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を含めました。理由は何ですか?
うわー、それは動作します – darwin
あなたのクラスに@Keep注釈を試す問題を修正私のPOJOに
@Keep
注釈を追加、コメントしたよう!ありがとう。 @Keepアノテーションを使用するか、クラスを保持するためにproguardファイルのルールを設定する必要がある場合 – tufekoiなぜこれに 'kotlin'タグがありますか? –