勉強したかったことを盛り込んでアプリ作った
AndroidでHackerNewsリーダー作った
作ったもの
HNReader - Google Play の Android アプリ
Google Playで"Hacker News"と検索すると似たようなのがたくさん出てくる
何個か試してあんまりしっくりこないし自分で作りたいな、と思っていた
それに加えていろいろ勉強したいこと、使ってみたいものが積まれてきていたので一気に消化するべく作った
やりたかったこと
- RxJava
- Realm
- DI
- RetroLabmda
- Design Support Library
- RecyclerView
特にRxAndroidとDaggerは使ってみたかった
ちなみに今回DataBindingは使ってみたくてbuild.gradleに設定まではしたけど、RecyclerViewで使うの大変そうすぎたのでスキップした
導入の面倒さに対する良さが分かってないのもある
いろいろ困ったとこ
- RxJava使い始めていきなりMissingBackPressureExceptionとか出て何も動かなかった
- RxJavaでページャっぽいの実装するとこ
- Modelに現在のページ持たせて
++
するしか思いつかなかった - Infinite Scrolling Android RecyclerView with RxJava
- Modelに現在のページ持たせて
- Daggerの使い始め
App
クラスの内部で宣言したAppComponent
インタフェースに@Component
つけたやつがDaggerApp_AppComponent
になるとか全くわからず困った- Android Studioでちゃんと補完されなかったため合っている確証も無く困った
- RealmObjectの使い回し
- DBから読み出したオブジェクトを別スレッドで利用するとエラー吐いて死んだ
RealmObject
継承したものとそうでないものを2つ用意してデータを受け渡しして解決toString
とかも実装しちゃいけないとかいろいろきつい
List<String>
とか持てないList<MyRealmString>
とかにしてRealmObject
を継承させないといけないの苦しい- せめて基本的な型については
RealmString
とか用意して欲しい
RealmObject
以外のtransactionとかwhereとかのapiは使いやすくて良かった- Realm BrowserなるスタンドアロンなMacアプリがあってDBの中見れるのも便利だった
- DBから読み出したオブジェクトを別スレッドで利用するとエラー吐いて死んだ
- Hacker NewsのAPIがアレ
- ちゃんとある HackerNews/API
- でもアレすぎる
- firebaseに乗っててRESTなAPIとかAndroidSDKもあったが、ただソートされたjson取ってくるやりかたもよく分からん
Android Quickstart - Firebaseの例が以下
myFirebaseRef.child("message").addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot snapshot) { System.out.println(snapshot.getValue()); //prints "Do you have data? You'll love Firebase." } @Override public void onCancelled(FirebaseError error) { } });
データ取ってきたいだけなのに、addValueEventListener
ってなんだよ!ってなるし使うのをやめた
リアルタイムな何かをする時とかは値を監視してそのコールバックで、とか出来そうなので用途によっては便利そうだけど、今回はいらない
Hacker Newsのフィードについたスコアでソートしたい、ってなるとTop Storyで取得できるidについて詳細を取得して、その結果のスコアでソートするみたいな処理が必要っぽくて面倒くさすぎたのでやらなかった
この"Top Story"ってのが最初からスコア順で並んでたら何も文句は無かったんだけど...
あとがき
- RxJavaとretrolambdaの組み合わせめっちゃ良くてストレスだいぶ軽減されたので使っていきたい
- まだまだ浅い理解で、使い込まないとRxの世界が理解出来なさそう
- Dagger2はテスト全く書いていないし複雑なアプリでもないので、恩恵は分からなかった
- Realmはスレッド間の受け渡しが出来ないとかメソッド生やしちゃいけないとか、
List<String>
も持てないとかいろいろ不便も大きいのでその辺解決しないと使いたくないかも - Hacker NewsのAPIアレだしRSSも標準のしか無いしでアレ
いろいろとやりたかったこととか軽くは消化できたので良かった
Hacker Newsリーダー自分で作るっていう実績は解除できたけど、良いものが出来たか?と言われると違う
直す気になれば直すし、意外とこれでよければそのままでいいや
個人的にタイムリーだった記事
まったくプロダクト志向ではなく技術志向ドリブンなアプリ開発となった