前人未踏の領域へ Androidアプリ開発編

Androidアプリ開発に関する調査メモ置き場。古い記事にはアプリ以外も含まれます。

Kotlin

Kotlin:String.ifBlank{}が便利そう

AndroidStudioでリファクタリングのアシストが表示された。 文字列がblankの場合に特定の値を設定したい場合に param.q = if (query.isNotBlank()) { query } else { "hoge" } ifBlank()を使えば対象の文字列を代入しつつ、nullまたは空の場合にだけ代替の値…

Android: Kotlin1.5でkotlin.runCatching内でResultを使った際にClassCastExceptionが発生した

課題 APIのレスポンスを処理する際にkotlin.runCatchingを用いて結果をLiveData<Result>に格納しているが、まれにkotlin.runCatchingのブロック内で戻り値とは別にLiveDataにResultをセットすることがあった。 private val _hoge: MutableLiveData<Result<Hoge>> by lazy { Mutabl</result<hoge></result>…

Retrofit:responseBodyがnullのsuspend関数を定義する

課題 Retrofit2でレスポンスが空のsuspend関数を定義したい場合、以下の書き方だとエラーになる。 suspend fun like( itemId:Int ) :Unit // 単にCallを外しただけだとNG。Void, Unit?も同様 <クラス名> was null but response body type was declared as no…

Kotlin : 代入とgetterと by lazy

課題 こんなコードがあったとして // 1 getter val nickname: String? get() = _user.value?.nickname // 2 代入 val nickname: String? = _user.value?.nickname // 3 by lazy val nickname: String? by lazy { _user.value?.nickname } // 4 関数 fun nick…

Kotlin ラムダ周りの標準関数について(let, also, with, apply, run)

ラムダ周りで似たような関数が多くて使い分けがさっぱり... というかletしか使わずにいたのでこれではいかんと一念発起して整理。 結論 こちらのスタイルガイドラインを参考 Coding Conventions - Kotlin Programming Language ブロックの中身で判断 ブロッ…

サブクラスをパラメータとして渡す

課題 Android StudioからJavaコードをKotlinに変換したところ、親クラスを引数に持つよう定義されたメソッドにその子クラスをパラメータで渡している箇所がコンパイルエラーになった。どうすればよいか。エラーとなった呼出し元 val fragment = PeopleFragme…