TRY ANDROID DEV

Android アプリ開発のコーディングネタ。あとエンジニアとしての活動

Android

'lateinit' modifier is not allowed on properties of primitive type はなぜ起こるのか。

背景 なんとなくnullableにしたくなくて次のように記載したら'lateinit' modifier is not allowed on properties of primitive type と警告された。 /** * Constructs an [ClientException] with no detail message. */ constructor() : super() /** * Const…

DroidKaigi 2019 official appを読んでみる④:Kotlin-coroutines-channel

背景 DroidKaigi 2019 のofficial appが公開されている:参照 せっかくだしコントリビュートしたいなと思ったけど思った以上に皆新しい技術使っててよくわからない。。 とりあえず一つずつ理解することにする。 Storeを読む ついにMainActivityから脱出してSt…

DroidKaigi 2019 official appを読んでみる③:Dagger2 Android Support

背景 DroidKaigi 2019 のofficial appが公開されている:参照 せっかくだしコントリビュートしたいなと思ったけど思った以上に皆新しい技術使っててよくわからない。。 とりあえず一つずつ理解することにする。 コンテンツの実装を見ようとした。 Navigation…

DroidKaigi 2019 official appを読んでみる②:Navigation

背景 DroidKaigi 2019 のofficial appが公開されている:参照 せっかくだしコントリビュートしたいなと思ったけど思った以上に皆新しい技術使っててよくわからない。。 とりあえず一つずつ理解することにする。 アプリ起動から順に追っていく DroidKaigi 2019…

DroidKaigi 2019 official appを読んでみる①:Gradle Kotlin DSL

背景 DroidKaigi 2019 のofficial appが公開されている:参照 せっかくだしコントリビュートしたいなと思ったけど思った以上に皆新しい技術使っててよくわからない。。 とりあえず一つずつ理解することにする。 DroidKaigi 2019 official app のbuild.gradle …

RecyclerViewのAdapterについて再度復習する

背景 毎回RecyclerViewを利用する時に「どうやって作るんだっけ」と悩む 根本的に理解し直す必要があるので再度復習する。 構成 登場人物は以下の4つ。 Adapter RecyclerViewに表示するViewを生成・管理・紐付ける役割を持つ。 表示するViewを生成するため…

Dagger2でDIする際、インスタンス生成時にパラメータを設定したい

背景 以下のクラスを考える。 ここではパラメータが二つあるが、それぞれ意味合いが異なる。 domain : インスタンスの特徴を示す情報。アイデンティティ。 repository : 依存性注入のため生成時に指定している。動作環境によって変更される。 このクラスのイ…

Interfaceの実体クラスにまたInterfaceがある場合のDI(Dagger2)

背景 以下の構成を考える。 ドメイン層は他の層と依存関係を持たないが、ドメインのメソッドで通信を行いたい。 そのためにinterfaceを設定してリポジトリ層と疎結合にする。 ただしリポジトリ層でも通信をする場合とテスト用にローカルファイルを返却する場…

Android開発のマージリクエストで最低限確認するべき項目まとめ

このドキュメントについて 本ドキュメントはAndroid開発において最低限確認するべき項目をまとめたものです。 作成理由 マージリクエスト時のレビューは基本的にはレビューアの技術力に左右されるものだと思いますが、 よく忙しさやモチベーションに比例して…

RecyclerViewにLiveDataをDataBindingしたい

状況 List型のデータを取得し、画面にRecyclerViewで表示させたい。 だけどobserve書きたくないし、RecyclerViewのAdapterクラスをViewModelで持ちたくないし。 LiveDataに値をpostしたらいい感じに紐づいてくれないだろうか 実装 以下のように実装した。 主…

kotlinでSmart cast to xxx is impossible because response.body() is a complex expressionが発生した場合

状況 Retrofitを使った以下のソースコードでスマートキャストできないとエラーが発生した。 override fun search(word: String): List<NovelIntroduction> { val response = searchService.getNovelList(word).execute() if (response.isSuccessful && response.body()!=null) {</novelintroduction>…

APIレスポンス(json)が一項目目と二項目目以降でレスポンス項目が異なって困った話

状況 利用しようとしたAPIレスポンス(json)が一項目目と二項目目以降でレスポンス項目が異なるという鬼畜仕様。 そのため全てのレスポンス項目を含むレスポンスクラスを作成し、一旦レスポンスを受け取る。 Translatorクラスを作成し、レスポンスをドメイン…

最小構成でDagger2の使い方の初歩を理解する with kotlin

対象者 DIはもうわかったけどDagger2の使い方がわからない人 javaのサンプルは多いけどkotlinのサンプルが少なくて困惑している人 @Moduleとか@Provideとか@Componentとか@Injectってあるけど最小で動かすとしたらどれが必要なんだと困惑している人 最小構成…

Clean ArchitectureでAndroidアプリのクラス設計をしてみる

結論 こんな感じになった。 クラス図 こんなシステムを想定した Webサイトで公開されている小説情報を表示したい Webサイトの検索機能を使えば、小説情報一覧を取得できる 小説情報一覧に含まれるコードを利用すれば、小説の中身が取得できる Clean Architec…

古いプロジェクトをgradleバージョン上げて再ビルドしたらproguardでエラー

背景 古いプロジェクトをgradleバージョン上げて再ビルドしたらproguardでエラーが出たので対応方法をメモ。 修正した内容 gradle plugin 1.3 -> 3.2.1 compileSdkVersion 21 -> 26 buildToolVersion 23.0.0 -> 27.0.3 発生したエラー 14:53:18 Class = [com…