LoginSignup
4
4

More than 5 years have passed since last update.

最近kotlin化してて地雷踏んだところ(加筆中)

Last updated at Posted at 2018-04-16

最近弊社Androidアプリをkotlin化してます。
ファイル数がありすぎる + 機能追加を並行して行っているのでかなりのんびり目で進めていますが、それでも地雷を踏みまくってユーザーに不便をかけてしまっているので、同じ轍を踏まないためにメモを残します。

kotlinのNullSafeな世界を守るために

Convert java to kotlinして気をつけること

onRestoreInstanceState()の復帰objectはすべてnullable対応しておく

  • なんかしらnullになるときがある(もっとちゃんとコード読めば解決する問題のような)
  • これに限らず Bundle にsetData()とかしてるとこは全部チェックしたほうがいいかもしれない
    override fun onRestoreInstanceState(savedInstanceState: Bundle) {
        super.onRestoreInstanceState(savedInstanceState)

        this.object = savedInstanceState.getSerializable(KEY_DATA_OBJECT) as? DataObject
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent)はそのままだと駄目

  • data :Intent がnullのcaseがあって落ちた。
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
}
  • ? を付けましょう。
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
}

javaのメソッドを使っているところはnullable対応しておけば間違いない

  • 自動でNonNullに変換されたが、javaなので平気でnullを突っ込んでくる
    • java側のコードをちゃんとチェックすればいいが、そうもいかないときもある
  • onItemClick()などの引数がnullのときがある。
  • もう大概のものに ? つける(落ちるよりはマシだけどよろしくない)

・ onActivityResult()のIntent.getSerializableExtra()

  • Castするときは必ず as? でやりましょう
val data = intent.getSerializableExtra(KEY_DATA) as? HogeData

RxJava1.xだとつらい

  • SingleSubscriber<Void> だと落ちる <Void?> にしよう
hogeSingle.subscribe(object : SingleSubscriber<Void?>() {
                    override fun onSuccess(response: Void?) {
                    })
  • RxJava2ならVoidなんて渡さなくていい。。Completableとか使いたい

おまけ

ConstraintLayoutへの置き換え

  • ConstraintLayoutをAPI Levelの低い端末で見る時は上下の制約をつけておかないとレイアウトが壊れる
  • (計測中)おそらく単純にConstraintLayoutにしても駄目で、階層構造をフラットにすることによって高速化を実現できるとかそんな話な気がする

Databindingへの移行

ついでにDatabindingに移行しているときに気づいたこと

  • branch切替時にcleanしないとDatabindingに移行したLayoutがビルドエラーになる

  • 自動生成されるファイルが残っているためだと思われる

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4