1. ホーム
  2. android

[解決済み] ブロードキャストインテント受信エラー問題

2022-02-19 03:15:18

質問

メインアクティビティとブロードキャストインテントを送信するバックグラウンドサービスにブロードキャストレシーバを作成しました。アプリケーションを実行しようとすると毎回クラッシュし、ログに以下のエラーメッセージが表示されます。

10-04 13:30:43.218: ERROR/AndroidRuntime(695): java.lang.RuntimeException: エラー ブロードキャストIntent {の受信 action=com.client.gaitlink.CommunicationService.action.LOGIN_STATUS_UPDATE。 (エクストラを含む) } in com.client.gaitlink.GaitLink$LoginStatusReceiver@431690e8

ブロードキャストメッセージは、以下のメソッドでCommunicationServiceクラスから送信されます。

private void announceLoginStatus(){
    Intent intent = new Intent(LOGIN_STATUS_UPDATE);
    intent.putExtra(SERVER_MESSAGE, mServerResponseMessage);
    intent.putExtra(SESSION_STRING, mSessionString);
    sendBroadcast(intent);
}

ここで

String LOGIN_STATUS_UPDATE = "com.client.gaitlink.CommunicationService.action.LOGIN_STATUS_UPDATE"

は、メインアクティビティで次のようなブロードキャストリバイバーが定義されています。

public class LoginStatusReceiver extends BroadcastReceiver {

        public void onReceive(Context context, Intent intent) {
            String serverMessage = intent.getStringExtra(CommunicationService.SERVER_MESSAGE);
            String sessionString = intent.getStringExtra(CommunicationService.SESSION_STRING);

            userInfo.setSessionString(sessionString);
            saveSettings();
        }
    }

を作成し、onResumeメソッドに登録します。

        IntentFilter loginStatusFilter;
        loginStatusFilter = new IntentFilter(CommunicationService.LOGIN_STATUS_UPDATE);
        loginStatusReceiver = new LoginStatusReceiver();
        registerReceiver(loginStatusReceiver, loginStatusFilter);

そして、マニフェストファイルには、次のような内容が含まれています。

<activity android:name=".GaitLink"
              android:label="@string/app_name">
        <intent-filter>
            ...
            <action android:name="com.client.gaitlink.CommunicationService.action.LOGIN_STATUS_UPDATE" />
        </intent-filter>
    </activity>

なぜLogが上記のようなメッセージを表示し、アプリケーションがクラッシュするのか、どなたか説明していただけると幸いです。

ありがとうございます。

解決方法は?

デバッガーでステップバイステップで、クラッシュが発生する場所を正確に探しましたか?

Android のライフサイクルイベントをオーバーライドしている場合、必要なときにベースクラスのコンストラクタを正しく呼び出しているかどうかが1つのポイントです。