Android: 片段 returns 中的 getContext() 仅在离开后退按钮时为 null
Android: getContext() in Fragment returns null only when leaving over the Back Button
我有一个片段,其中包含待处理通知意图的 ArrayList。
我在 onPause() 中构建了那个提醒列表,因为我只希望当应用程序不在前台时 运行 显示。
如果我将应用程序留在主屏幕按钮上,一切正常,但如果我离开后退按钮,编译器告诉我我尝试在空引用上调用 getSystemService()。
主要 Activitie 的 onPause:
@Override
protected void onPause() {
super.onPause();
tasksFragment.buildReminderList();
}
这里是片段中的方法:
public void buildReminderList() {
mReminderList = new ArrayList<>();
if (mTaskList != null) {
for (int i = 0; i < mTaskList.size(); i++) {
if (mTaskList.get(i).hasReminder() && mTaskList.get(i).getMillisLeftToday() > 0) {
AlarmManager alarmManager = (AlarmManager) getContext().getSystemService(Context.ALARM_SERVICE);
intent = new Intent(getContext(), AlertReceiver.class);
intent.putExtra("title", mTaskList.get(i).getName());
intent.putExtra("ID", i);
alarmIntent = PendingIntent.getBroadcast(getContext(), i, intent, 0);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, mTaskList.get(i).getReminderHour());
calendar.set(Calendar.MINUTE, mTaskList.get(i).getReminderMinutes());
if (calendar.before(Calendar.getInstance())) {
calendar.add(Calendar.DATE, 1);
}
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000 * 60 * 60 * 24, alarmIntent);
mReminderList.add(alarmIntent);
}
}
}
}
按下后退按钮时,片段不再附加到 activity,因此 getContext()
returns null。
您可以检查您的片段是否仍添加到 activity,然后像下面那样调用您的 getSystemService
if (isAdded()) {
getContext().getSystemService(Context.ALARM_SERVICE)
}
我有一个片段,其中包含待处理通知意图的 ArrayList。
我在 onPause() 中构建了那个提醒列表,因为我只希望当应用程序不在前台时 运行 显示。
如果我将应用程序留在主屏幕按钮上,一切正常,但如果我离开后退按钮,编译器告诉我我尝试在空引用上调用 getSystemService()。
主要 Activitie 的 onPause:
@Override
protected void onPause() {
super.onPause();
tasksFragment.buildReminderList();
}
这里是片段中的方法:
public void buildReminderList() {
mReminderList = new ArrayList<>();
if (mTaskList != null) {
for (int i = 0; i < mTaskList.size(); i++) {
if (mTaskList.get(i).hasReminder() && mTaskList.get(i).getMillisLeftToday() > 0) {
AlarmManager alarmManager = (AlarmManager) getContext().getSystemService(Context.ALARM_SERVICE);
intent = new Intent(getContext(), AlertReceiver.class);
intent.putExtra("title", mTaskList.get(i).getName());
intent.putExtra("ID", i);
alarmIntent = PendingIntent.getBroadcast(getContext(), i, intent, 0);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, mTaskList.get(i).getReminderHour());
calendar.set(Calendar.MINUTE, mTaskList.get(i).getReminderMinutes());
if (calendar.before(Calendar.getInstance())) {
calendar.add(Calendar.DATE, 1);
}
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000 * 60 * 60 * 24, alarmIntent);
mReminderList.add(alarmIntent);
}
}
}
}
按下后退按钮时,片段不再附加到 activity,因此 getContext()
returns null。
您可以检查您的片段是否仍添加到 activity,然后像下面那样调用您的 getSystemService
if (isAdded()) {
getContext().getSystemService(Context.ALARM_SERVICE)
}