事象
今までのコードが手作業でJsonをパースしてたので、APIのレスポンスに値が追加されるたびに自前のparserも書き足す運用だった。毎回修正箇所も多くなるのでGsonで一発Parse!スマートやん!てやろうとしてた
Gsonの導入
protected static final Gson GSON = new GsonBuilder().serializeNulls().setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE).create();
これでをいろんなAPIで使いまわすつもりでstatic宣言。
FieldNamingPolicy
をセットするとJSONが何ケースで返ってくるかを指定していい感じにDtoにパースしてくれる
この場合はjsonでCode
をdtoのcode
に代入してくれる
デバッグまでは何も問題なし。
デバッグまでは何も問題なく通っていたがリリースビルドにした瞬間うまくいかず。
本番APIが変わったのか、色々試したけど問題なさそう。
結局Proguardだった
今まで@SerializeName
のアノテーションを使ってパースをしていたのでリリースビルドしても問題なかったが、
リリースビルドにすると難読化され、クラス名が変わってしまうのでGsonがうまくパースできないそう。
パース後のDtoがnullなので焦った。
-keep class jp.co.hoge.parser.response.** { *;}
proguardでレスポンスをパースする対象のDtoの難読化をしないように設定するとこれは解決される。
お陰で全然触ってこなかったproguardのことも勉強しなきゃなと思いました…。
完全にこの記事と同じ。結構時間かかっちゃったけどここまでたどり着くのに時間がかかってしまった
http://qiita.com/petitviolet/items/1b709f3f0db2659a271a