TRY ANDROID DEV

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

GW:全力でTODOアプリを作ってみる(3日目)

背景 GWなのでアウトプットに専念してみる 一旦基本のTODOアプリを作ったらどんな風になるのか試してみる 子供が寝た隙に毎日1時間程度の稼働でどこまでいけるか 子供が高熱を出して早速3日ストップした。。。 Repositoryを用意する 直接Daoを操作するのは…

GW:全力でTODOアプリを作ってみる(2日目)

背景 GWなのでアウトプットに専念してみる 一旦基本のTODOアプリを作ったらどんな風になるのか試してみる 子供が寝た隙に毎日1時間程度の稼働でどこまでいけるか 子供が高熱を出して早速3日ストップした。。。 Navigationを用意する まずはres/navigation …

GW:全力でTODOアプリを作ってみる(1日目)

背景 GWなのでアウトプットに専念してみる 一旦基本のTODOアプリを作ったらどんな風になるのか試してみる 子供が寝た隙に毎日1時間程度の稼働でどこまでいけるか Roomを使ってDB作成 @Dao interface TodoDao { @Query("SELECT * from todo") fun getAllWords…

Android Architecture Components: Room の再復習

背景 急遽RoomとPagingの再復習をする必要に駆られたので頑張る まずはRoomから Room RoomはQLiteをラップして利用できるコンポーネント。 以下のCodeLabsを行う。 codelabs.developers.google.com Gradleの設定 以下の設定をbuild.gradleに記載する // Room…

Type parameter bound for T in XXX is not satisfied が発生した場合の対処方法

背景 新規プロジェクトでViewModelの動きを試そうとしたら「Type parameter bound for T in XXX is not satisfied」が発生した ソースコード MainActivity.kt import android.os.Bundle import androidx.fragment.app.FragmentActivity import androidx.life…

'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…

Firebaseでチャットアプリを作る(Cloud Firestore)

背景 なんとなくFirebase使ったことないのまずいかなぁと思ってFirebaseに手を出してみる。 今まではPush通知くらいしか使ってなかった。 今回はCloud Firestoreを利用してチャットアプリを作ってみる Cloud Firestore NoSQLドキュメント指向データベースら…

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 …

Kotlinでprivate constructorを利用する(companion object)

背景 static public な文字列を定義したくなった。(途中で思い返して異なる方法をとったけれど。) 内容 以下のような形でdomainに文字列を設定していたが、利用可能なドメインは限られているため、いくつかの固定文字列から選択させる形を取ろうとした。 f…

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…

このブログで書くこと/書かないことメモ

ブログ開設の経緯 技術力を向上させるためにアウトプットする場所がほしかった 前にやったけど忘れた問題を解決したかった 書くこと プログラミングしていく上で考えたこと ハマったこととその対策のメモ エンジニアとしての活動・チャレンジ 書かないこと …