2

起動完了を受け取る権限があり、実行するレシーバーを指定しました。

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

<receiver android:name="xyz.android.MyAlarm" >
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>

受信コードはこちら

public class MyAlarm extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent) {
    Intent i = new Intent(context, InviteService.class);
    context.startService(i);        
}
}

そして、これが私の InviteService サービス コードのスニペットです。

public class InviteService extends IntentService {

private String userId;
private SharedPreferences settingsPrefs;

public InviteService() {
    super("InviteService");
}

@Override
protected void onHandleIntent(Intent intent) {

    if (Utils.isOnline(this)) {
        userId = getSharedPreferences("user-session", MODE_PRIVATE)
                .getString("userId", null);
        settingsPrefs = getSharedPreferences(userId, MODE_PRIVATE);

        Log.d("turnOffAlarm",
                "" + settingsPrefs.getBoolean("turnOffAlarm", false));
        if (userId == null
                || settingsPrefs.getBoolean("turnOffAlarm", false)) {
            stopService(intent);
            return;
        }
      }
    }

ユーザーが電話機を再起動すると、次のエラー メッセージが表示されます。

java.lang.NullPointerException
at xyz.android.InviteService.onHandleIntent(InviteService.java:134)
at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:59)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.os.HandlerThread.run(HandlerThread.java:60)

null ポインター例外が発生している行は、turnOffAlarm をログに記録する行です。これが起こっていることです。何らかの理由で、userId が値 null を取得するべきではありません。この値は設定ファイルに保存されており、電話が再起動するまで問題は発生しません。

エミュレーターでこのエラーを再現できません。何か提案はありますか?

4

0 に答える 0