我有权接收启动,我已指定运行哪个接收器。
<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)
我得到空指针异常的行是记录turnOffAlarm的行。所以这就是发生的事情。由于某种原因,userId获取的值为null,而不是。此值已存储在首选项文件中,并且在手机重新启动之前不会出现问题。
我无法在模拟器上重现此错误,有什么建议吗?