Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

最近弊社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がビルドエラーになる

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした