1

私のアプリには、自分のイベントを繰り返すオプションがあります。その繰り返しイベントの各繰り返しには、すぐにイベントが開始されることを知らせる通知(アラーム)があります。ブロードキャスト受信者の中でアラームを設定するには

最初のアラームが呼び出されるときに、それはBroadcastReceiverを開き、通知を作成し、次の再発のためのアラームを設定する必要があります。

@Override 
public void onReceive(Context context, Intent intent) { 
    // When onReceive gets called the event notification is triggered 
    DatabaseHelper myDatabaseHelper = new DatabaseHelper(context); 

     // Create notification 
     int id = intent.getIntExtra("id", 0); 
     String name = intent.getStringExtra("name"); 
     long notificationTime = intent.getLongExtra("notificationTime", 0); 
     String recurrenceType = intent.getStringExtra("recurrenceType"); 
     String message = intent.getStringExtra("message"); 

     if (recurrenceType.equals("Every week")) { 
      // repeatInterval = unix timestamp so * 1000 to get in Millis for notificationTime 
      long repeatInterval = 604800 * 1000; 
      notificationTime += repeatInterval; 
      myDatabaseHelper.updateNotificationTime(notificationTime); 
      setAlarm(context, intent, id, name, notificationTime, recurrenceType, message); 
     } else { 
      myDatabaseHelper.updateNotificationTime(0); 
     } 

     createNotification(context, message, name, id); 
    } 
} 

さて、これはイベントの非常に最初の警報のために正常に動作します。通知が作成されます。 2番目のアラームが呼び出されると、インテントが空になります。最初のアラームの後、他のすべてのインテントが空になり、空の通知が作成されると、アプリはNullPointerExceptionでクラッシュします。注:私は自分のアプリを開いたままにしておきます。 setAlarm(...)メソッドは、BroadcastReceiverクラスの内部にあります。で

08-25 12:12:35.917 19323-19323/com.madgusto.when2game E/AndroidRuntime: FATAL EXCEPTION: main 
                    Process: com.madgusto.when2game, PID: 19323 
                    java.lang.RuntimeException: Unable to start receiver com.madgusto.when2game.alarm.AlarmReceiver: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference 
                     at android.app.ActivityThread.handleReceiver(ActivityThread.java:3018) 
                     at android.app.ActivityThread.-wrap18(ActivityThread.java) 
                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1544) 
                     at android.os.Handler.dispatchMessage(Handler.java:102) 
                     at android.os.Looper.loop(Looper.java:154) 
                     at android.app.ActivityThread.main(ActivityThread.java:6077) 
                     at java.lang.reflect.Method.invoke(Native Method) 
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) 
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756) 
                    Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference 
                     at com.madgusto.when2game.alarm.AlarmReceiver.onReceive(AlarmReceiver.java:48) 
                     at android.app.ActivityThread.handleReceiver(ActivityThread.java:3011) 
                     at android.app.ActivityThread.-wrap18(ActivityThread.java)  
                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1544)  
                     at android.os.Handler.dispatchMessage(Handler.java:102)  
                     at android.os.Looper.loop(Looper.java:154)  
                     at android.app.ActivityThread.main(ActivityThread.java:6077)  
                     at java.lang.reflect.Method.invoke(Native Method)  
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)  
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)  

だから、NULLポインタ:

スタックトレース:私は私のアラームを設定する方法

if (recurrenceType.equals("Every week")) { 

今、私は内部のアラームを設定するために行くんかbroadcastreceiver正しい方法ですか?ありがとう!

+0

私はまだ何か助けていただければ幸いです! –

答えて

0

何が起こっているかはかなり明確です。このコードを見てください:

Intent intentAlarm = new Intent(context, AlarmReceiver.class); 
intent.putExtra("id", id); 
intent.putExtra("name", name); 
intent.putExtra("notificationTime", notificationTime); 
intent.putExtra("recurrenceType", recurrenceType); 
intent.putExtra("message", message); 
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, id, intentAlarm, PendingIntent.FLAG_UPDATE_CURRENT); 

あなたは、変数intentAlarmIntentを作成しますが、変数intentを使用してIntentにすべての「エクストラ」を置きます。次に、PendingIntent.getBroadcast()に引数としてintentAlarmを渡します。もちろんintentAlarmには「追加」はありません。

「エクストラ」をすべてintentAlarmに入れてみてください。

関連する問題