2017-08-28 170 views
0

我有一個片段,其中包含和待定通知內容的ArrayList。Android:getContext()在Fragment中僅當離開後退按鈕時返回null

我在onPause()中生成提醒列表,因爲我只想在應用程序未在前臺運行時顯示。

一切工作正常,如果我離開應用程序的HomeScreen按鈕,但如果我留在後退按鈕,編譯器告訴我,我嘗試調用空引用getSystemService()。

主要應用工作的的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); 
      } 
     } 
    } 
} 

回答

1

當按下後退按鈕時,所述片段不再連接到活性,使getContext()返回NULL。

您可以檢查您的片段仍然是添加到活動中,然後打電話給你getSystemService像下面

if (isAdded()) { 
    getContext().getSystemService(Context.ALARM_SERVICE) 
} 
+0

謝謝你,能避免崩潰。但是,它不再保存提醒列表。任何想法如何我可以解決這個問題? –

+0

您必須使用服務來實現這一點,請閱讀[廣播接收器](https://developer.android.com/reference/android/content/BroadcastReceiver.html) –

+0

謝謝。我想我也可以將整個buildReminderList方法從片段中移出到主要活動中。 –