2017-04-24 61 views
-2

我的應用程序包含一個本地人列表,每個地方都有一個日期。當我點擊本地時,我會用本地信息打開一個新的活動,然後根據此日期創建一個警報。警報應在本地提供的日期前2天醒來。這是我如何做它:BroadCastReceiver類上的NullPointerException;

當我進入本地活動:

private void scheduleAlarm(Date notificationDate) { 
    Intent intent = new Intent(getApplicationContext(), Receiver.class).putExtra("myString", myString); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), id, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

    AlarmManager alarm = (AlarmManager) getSystemService(ALARM_SERVICE); 
    alarm.set(AlarmManager.RTC, notificationDate.getTime(), pendingIntent); 
} 

接收機類:

public class Receiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     String myString = intent.getStringExtra("myString"); 
     if (myString.matches("myString") Toast.makeText(context, "Working", Toast.LENGTH_SHORT).show(); 
    } 
} 

在清單中註冊:

<receiver android:name=".Receiver" android:enabled="true" > 
    <intent-filter android:priority="999" > 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
     <action android:name="android.intent.action.QUICKBOOT_POWERON" /> 
    </intent-filter> 
</receiver> 

這通常工作正常,但是當我重新啓動手機時,只要進入主屏幕,我的應用就會崩潰。

我在我的應用程序上實現了fabric crashlytics,如果檢查崩潰,我在Receiver.class上得到一個NullPointerException:pattern == null。

我敢打賭,當我重新啓動我的手機,我失去了意向的羣衆演員,這行越來越NullPointerException異常:

String myString = intent.getStringExtra("myString"); 

有沒有人有任何線索?我應該如何處理這次事故?

+0

如果我檢查myString是否爲空或匹配「」,並且只能以其他方式進行,我不會收到崩潰,所以我確實得到了這個崩潰,因爲當我重新啓動手機時extras爲空。 – Ravers

回答

1

正如一般的規則,做"myString".matches(myString),你不必做兩次檢查。

意圖沒有額外的原因是因爲你沒有收到報警事件,而是沒有任何額外的事件BOOT_COMPLETED事件。在啓動完成時,您需要重新安排警報,附加項和所有內容,因爲AlarmManager不會在重新啓動後持續存在。

相關問題