2016-07-31 7 views
0

私はその後、バックグラウンドで実行されている他のサービスに通知を送信し、私のアラームレシーバクラスの特定のアラームを受信したときに通知を送信しようとしています。サービスに通知を実装する方法は?

私はこのエラーを取得しています:

Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference 

私はこのトピックに関する多くのことを研究してきたが、私が見つけた解決策のどれも働いていません。

これはアラームレシーバクラス

public void onReceive(Context context, Intent intent) 
    { 
     switch(intent.getIntExtra("DosageIdentifier",-1)) { 
      case 1: 
      { 
       for(int i = 0; i < SetMyAlarm.countSeqWithDatabaseList.size(); i++) 
       { 
        prescriptionString = SetMyAlarm.prescriptionList.get(i); 
        myNotification.acceptNotificationString(prescriptionString); 

       } 
       break; 
      } 

これは、これは私が取得しています誤りである私のSetMyAlarmサービス

public void acceptNotificationString(String text) 
    { 
     sendNotification(text); 
    } 
    private void sendNotification(String text) { 
     try { 
      Intent notificationIntent = new Intent(this, MainActivity.class); 
      notificationIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

      int flags = PendingIntent.FLAG_UPDATE_CURRENT; 
      PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, flags); 

      int icon = R.mipmap.ic_launcher; 
      CharSequence tickerText = "ALERT"; 
      CharSequence contentTitle = "Notification"; 
      CharSequence contentText = text; 

      Notification notification = new Notification.Builder(this) 
        .setSmallIcon(icon) 
        .setTicker(tickerText) 
        .setContentTitle(contentTitle) 
        .setContentText(contentText) 
        .setContentIntent(pendingIntent) 
        .setAutoCancel(true) 
        .build(); 

      NotificationManager manager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); 
      final int NOTIFICATION_ID = 1; 
      manager.notify(NOTIFICATION_ID, notification); 
     } 
     catch (NullPointerException e) 
     { 
      e.printStackTrace(); 
     } 
    } 

です:

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference 
    at android.content.ContextWrapper.getPackageName(ContextWrapper.java:133) 
    at android.content.ComponentName.<init>(ComponentName.java:128) 
    at android.content.Intent.<init>(Intent.java:4449) 
    at timertesting.kaad.timertesting.SetMyAlarm.sendNotification(SetMyAlarm.java:564) 
    at timertesting.kaad.timertesting.SetMyAlarm.acceptNotificationString(SetMyAlarm.java:560) 
    at timertesting.kaad.timertesting.AlarmReceiver.onReceive(AlarmReceiver.java:23) 
    at android.app.ActivityThread.handleReceiver(ActivityThread.java:2725) 
    at android.app.ActivityThread.-wrap14(ActivityThread.java) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1421) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:5417) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

何か提案がありますか?

+0

acceptNotificationString()は、各クラスの一部ですか?活動、サービス?より多くのコード – W0rmH0le

答えて

0

あなたは以下のコードを試してみてくださいもらえますか?

public void onReceive(Context context, Intent intent) { 
    ... 
    for(int i = 0; i < SetMyAlarm.countSeqWithDatabaseList.size(); i++) { 
     prescriptionString = SetMyAlarm.prescriptionList.get(i); 
     myNotification.acceptNotificationString(context, prescriptionString); 
    } 
    ... 
} 


public void acceptNotificationString(Context context, String text) { 
    sendNotification(context, text); 
} 

private void sendNotification(Context context, String text) { 
    try { 
     Intent notificationIntent = new Intent(context, MainActivity.class); 
     .... 
     PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, notificationIntent, flags); 
     ... 
     Notification notification = new Notification.Builder(context) 
     .... 
     NotificationManager manager = (NotificationManager) context.getSystemService(NOTIFICATION_SERVICE); 
    } 
} 
+0

を挿入し、あなたが言ったように私は私のコードを編集したが、今、私のNullPointerExceptionがコード 'NotificationManagerマネージャ=(NotificationManager)getSystemService(NOTIFICATION_SERVICE)であり;' –

+0

はこのお試しください:=(NotificationManager)context.getSystemService(NOTIFICATION_SERVICE)NotificationManagerマネージャを、 – W0rmH0le

+0

ありがとうございました。しかし、なぜ私たちがそれをしなければならないのか私に説明してもらえますか? –

関連する問題