起動完了を受け取る権限があり、実行するレシーバーを指定しました。
<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 を取得するべきではありません。この値は設定ファイルに保存されており、電話が再起動するまで問題は発生しません。
エミュレーターでこのエラーを再現できません。何か提案はありますか?