見出し画像

【悩み】【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);
}

この記事が気に入ったらサポートをしてみませんか?