2017-05-20 10 views
1

Ich bin ein Anfänger mit Android. Ich versuche, eine Benachrichtigung zu einem bestimmten Datum anzuzeigen. Wenn ich versuche, die Methode auszuführen showNotification() ich die folgende Fehlermeldung erhalten:java.lang.RuntimeException: Receiver kann nicht gestartet werden

java.lang.RuntimeException: Unable to start receiver com.example.azernax.dforget.ScheduleNotification: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference

Ich habe versucht, diesen Fehler ohne Erfolg zu beheben.

ScheduleNotification:

public class ScheduleNotification extends WakefulBroadcastReceiver { 

private AlarmManager alarmManager; 

@Override 
public void onReceive(Context context, Intent intent) { 
    ScheduleNotification.completeWakefulIntent(intent); 

    //create notification to show !!! 
    Toast.makeText(context, "TEST schedule!!!! ", Toast.LENGTH_LONG).show(); 
    Notification_center notification = new Notification_center(); 
    notification.showNotification(); //######################### CRASH !!!! 
} 

Notification_center:

public class Notification_center extends AppCompatActivity { 

public void showNotification() 
{ 
    NotificationCompat.Builder builder = new NotificationCompat.Builder(this); 
    builder.setSmallIcon(R.drawable.icon); 
    builder.setContentTitle("dF Notification!"); 
    builder.setContentText("description"); //--description event-- 

    Intent intent = new Intent(this, MainActivity.class); 
    TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); 
    stackBuilder.addParentStack(MainActivity.class); 
    stackBuilder.addNextIntent(intent); 

    PendingIntent pendingIntent = stackBuilder.getPendingIntent(0,PendingIntent.FLAG_UPDATE_CURRENT); 
    builder.setContentIntent(pendingIntent); 
    NotificationManager NM = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
    NM.notify(0,builder.build()); 
} 

Antwort

1
Notification_center notification = new Notification_center(); 

NIE eine Instanz einer Aktivität selbst erstellen, weil es nie richtig funktioniert.

Den Code von showNotification() in onReceive() verschieben. Sie können die Context übergeben in onReceive() als Ersatz für this und für den Aufruf an getSystemService().

Sie brauchen auch nicht WakefulBroadcastReceiver hier. Das ist für Fälle, in denen Sie die Arbeit an etwas anderes delegieren müssen (z. B. IntentService). In Fällen, in denen alle Arbeiten bis Ende onReceive() abgeschlossen sind, müssen Sie keine separate WakeLock verwalten, die für WakefulBroadcastReceiver ist.

Verwandte Themen