背景 GWなのでアウトプットに専念してみる 一旦基本のTODOアプリを作ったらどんな風になるのか試してみる 子供が寝た隙に毎日1時間程度の稼働でどこまでいけるか 子供が高熱を出して早速3日ストップした。。。 Repositoryを用意する 直接Daoを操作するのは…
背景 GWなのでアウトプットに専念してみる 一旦基本のTODOアプリを作ったらどんな風になるのか試してみる 子供が寝た隙に毎日1時間程度の稼働でどこまでいけるか 子供が高熱を出して早速3日ストップした。。。 Navigationを用意する まずはres/navigation …
背景 GWなのでアウトプットに専念してみる 一旦基本のTODOアプリを作ったらどんな風になるのか試してみる 子供が寝た隙に毎日1時間程度の稼働でどこまでいけるか Roomを使ってDB作成 @Dao interface TodoDao { @Query("SELECT * from todo") fun getAllWords…
背景 急遽RoomとPagingの再復習をする必要に駆られたので頑張る まずはRoomから Room RoomはQLiteをラップして利用できるコンポーネント。 以下のCodeLabsを行う。 codelabs.developers.google.com Gradleの設定 以下の設定をbuild.gradleに記載する // Room…
背景 新規プロジェクトで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…
背景 なんとなくnullableにしたくなくて次のように記載したら'lateinit' modifier is not allowed on properties of primitive type と警告された。 /** * Constructs an [ClientException] with no detail message. */ constructor() : super() /** * Const…
背景 なんとなくFirebase使ったことないのまずいかなぁと思ってFirebaseに手を出してみる。 今まではPush通知くらいしか使ってなかった。 今回はCloud Firestoreを利用してチャットアプリを作ってみる Cloud Firestore NoSQLドキュメント指向データベースら…
背景 DroidKaigi 2019 のofficial appが公開されている:参照 せっかくだしコントリビュートしたいなと思ったけど思った以上に皆新しい技術使っててよくわからない。。 とりあえず一つずつ理解することにする。 Storeを読む ついにMainActivityから脱出してSt…
背景 DroidKaigi 2019 のofficial appが公開されている:参照 せっかくだしコントリビュートしたいなと思ったけど思った以上に皆新しい技術使っててよくわからない。。 とりあえず一つずつ理解することにする。 コンテンツの実装を見ようとした。 Navigation…
背景 DroidKaigi 2019 のofficial appが公開されている:参照 せっかくだしコントリビュートしたいなと思ったけど思った以上に皆新しい技術使っててよくわからない。。 とりあえず一つずつ理解することにする。 アプリ起動から順に追っていく DroidKaigi 2019…
背景 DroidKaigi 2019 のofficial appが公開されている:参照 せっかくだしコントリビュートしたいなと思ったけど思った以上に皆新しい技術使っててよくわからない。。 とりあえず一つずつ理解することにする。 DroidKaigi 2019 official app のbuild.gradle …
背景 static public な文字列を定義したくなった。(途中で思い返して異なる方法をとったけれど。) 内容 以下のような形でdomainに文字列を設定していたが、利用可能なドメインは限られているため、いくつかの固定文字列から選択させる形を取ろうとした。 f…
背景 毎回RecyclerViewを利用する時に「どうやって作るんだっけ」と悩む 根本的に理解し直す必要があるので再度復習する。 構成 登場人物は以下の4つ。 Adapter RecyclerViewに表示するViewを生成・管理・紐付ける役割を持つ。 表示するViewを生成するため…
背景 以下のクラスを考える。 ここではパラメータが二つあるが、それぞれ意味合いが異なる。 domain : インスタンスの特徴を示す情報。アイデンティティ。 repository : 依存性注入のため生成時に指定している。動作環境によって変更される。 このクラスのイ…
背景 以下の構成を考える。 ドメイン層は他の層と依存関係を持たないが、ドメインのメソッドで通信を行いたい。 そのためにinterfaceを設定してリポジトリ層と疎結合にする。 ただしリポジトリ層でも通信をする場合とテスト用にローカルファイルを返却する場…
このドキュメントについて 本ドキュメントはAndroid開発において最低限確認するべき項目をまとめたものです。 作成理由 マージリクエスト時のレビューは基本的にはレビューアの技術力に左右されるものだと思いますが、 よく忙しさやモチベーションに比例して…
状況 List型のデータを取得し、画面にRecyclerViewで表示させたい。 だけどobserve書きたくないし、RecyclerViewのAdapterクラスをViewModelで持ちたくないし。 LiveDataに値をpostしたらいい感じに紐づいてくれないだろうか 実装 以下のように実装した。 主…
状況 Retrofitを使った以下のソースコードでスマートキャストできないとエラーが発生した。 override fun search(word: String): List<NovelIntroduction> { val response = searchService.getNovelList(word).execute() if (response.isSuccessful && response.body()!=null) {</novelintroduction>…
状況 利用しようとしたAPIレスポンス(json)が一項目目と二項目目以降でレスポンス項目が異なるという鬼畜仕様。 そのため全てのレスポンス項目を含むレスポンスクラスを作成し、一旦レスポンスを受け取る。 Translatorクラスを作成し、レスポンスをドメイン…
対象者 DIはもうわかったけどDagger2の使い方がわからない人 javaのサンプルは多いけどkotlinのサンプルが少なくて困惑している人 @Moduleとか@Provideとか@Componentとか@Injectってあるけど最小で動かすとしたらどれが必要なんだと困惑している人 最小構成…
結論 こんな感じになった。 クラス図 こんなシステムを想定した Webサイトで公開されている小説情報を表示したい Webサイトの検索機能を使えば、小説情報一覧を取得できる 小説情報一覧に含まれるコードを利用すれば、小説の中身が取得できる Clean Architec…
背景 古いプロジェクトをgradleバージョン上げて再ビルドしたらproguardでエラーが出たので対応方法をメモ。 修正した内容 gradle plugin 1.3 -> 3.2.1 compileSdkVersion 21 -> 26 buildToolVersion 23.0.0 -> 27.0.3 発生したエラー 14:53:18 Class = [com…
ブログ開設の経緯 技術力を向上させるためにアウトプットする場所がほしかった 前にやったけど忘れた問題を解決したかった 書くこと プログラミングしていく上で考えたこと ハマったこととその対策のメモ エンジニアとしての活動・チャレンジ 書かないこと …