![見出し画像](https://assets.st-note.com/production/uploads/images/91116514/rectangle_large_type_2_3e24fa0ad389d30d72648a710ab4a43b.png?width=1200)
【悩み】【Android】【Java】Intent情報のNullチェック
Androidアプリケーション開発において悩んでいることです。
皆さんの意見が欲しいです。
Intentを受信する処理でのnullチェックですが皆さんはチェックしているのでしょうか?
1. onReceiveで受信したintent自体のnullチェック
2. intentから取得したaction名(String)のnullチェック
3. intentに値が設定されている際に使用するgetXXExtraで取得した値のnull
BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// 1. intentのNullチェック
if (intent == null) return;
String actionName = intent.getAction();
// 2. action文字列のnullチェック
if(actionName == null) return;
if (actionName.equals("com.example.myapplication.myAction")) {
Log.d("com.example.myapplication.myAction", "onReceive");
String value = intent.getStringExtra("key");
// 3. getXXExtraのnullチェック
if (value == null) return;
Log.d("com.example.myapplication.myAction", String.format("intent value : %s", value));
}
}
};
1,2については基本発生しないので、チェックしない方がほとんどだと思いますが、開発の現場においては異常系を考慮しなければならないため、仕方なくnullチェックを行っている方もいるのではないのかと思います。
3については起こり得るため、チェックは必要となるので書いている方がほとんどだと思います。
小さなアプリケーションの場合は、しっかり書いてもそこまで手間ではないので良いのですが、大規模になっていくとintent.getXXExtraのnullチェック(異常用の処理記述)だけでも大変になってくるので悩みどころです。
Optionalのように便利な書き方を知っている方、教えてください。
※今回はJava8でAndroid開発を行う前提です。
#OptionalのifPresentやorElseみたいにかけると便利なんですけどね。
public void sample(){
//Optional 1
{
Optional<String> opt = getName(99);
opt.ifPresent(name -> Log.d("sample",String.format("name = %s", name)));
}
//Optional 2
{
Optional<String> opt = getName(99);
String name = opt.orElse("null");
Log.d("sample",String.format("name = %s", name));
}
}
/**
* ユーザIDに対応する名前を取得する
* @param id ユーザID
* @return 名前 存在しないIDの場合はnullを返却する
*/
public Optional<String> getName(int id){
String name = null;
switch (id) {
case 0:
name = "tanaka";
break;
case 1:
name = "suzuki";
break;
}
return Optional.ofNullable(name);
}