[Android] warning に対応してみる

警告ですが、エラーにならないので、そのままにしていることがありますが真面目に向き合ってみようという趣旨です。

  1. @NonNull
  2. Unchecked call
  3. package-private
  4. NullPointerException
  5. buttonBarButtonStyle

Android Studio 3.0
Android 8.0

 



Warnings

 
最近のemulator、Android Studio 3.0 ではwarningがはっきり表示されるようになったので(仕方なく)積極的にバグの種をつぶせるようになりましたね。

 

@NonNull

 
Not annotated parameter overrides @NonNull parameter
 

 
これはNullness アノテーション| Android Studioにあるように
このメソッドの引数はNullを許容しないことを表明するアノテーションです。
 
Nullにならないのであればこのアノテーションを付加します。
あるいは、ここにNullが入ってはいけないというこのメソッドを使う人(自分も含め)への警告ともなり得ます。
 
warningが出ている引数の前に@NonNullを付加して
NonNullが使うためのライブラリもimportしておきます。

この onRequestPermissionsResult ではシステムから返されるものなのでこちら側では操作できないと思っていましたが
Android Quickstartにはこういうコメントをみつけました。
 
permissions
grantResults
Neve null
とありますから@NonNullをつけても大丈夫、というかwarning入れなくてもいいような気もします。
 

 

Unchecked call

 
unchecked call to XXX as a member of raw type ZZZ
 


このケースではArrayAdapterの設定でメソッドを使おうとした時のwarningです。うっかりジェネリックを設定しないでビルドしてもエラーではなかったのが、基本的にジェネリックが必要だという警告です。
java.lang.Object
↳ android.widget.BaseAdapter
android.widget.ArrayAdapter<T>
 

 

package-private

 
Access can be package-private


 
ありがちなのがクラスをpublicで作成していたけれど、最終的にスコープがパッケージ内部のみで済んだ場合などで、package-privateにし忘れてます的な警告でしょう。

 

NullPointerException

 
XXX may produce ‘java.lang.NullPointerException’
 

 
Nullになる可能性があるという警告です。nullチェックを入れろという警告ですね
 

 

 

buttonBarButtonStyle

 

 
これはレイアウトファイルでButtonにwarningが表示されました。これは今に始まった警告ではないようですが、
 

Buttons in button bars should be borderless;
use style=”android:attr/buttonBarButtonStyle”
(and ?android:attr/buttonBarStyle on the parent)

ということで、Buttons – Components – Material Designにリンクが貼られていますが、Material Designを周到せよということらしいです。
 
レイアウトファイルに2箇所の追加をします。

 
ボーダーレスのフラットな、否Material Design的なボタンになりました。