Meine App hat in letzter Zeit einige Abstürze bekommen, und ich frage mich, ob es an den Flags auf den Absichten liegen könnte.Android App Absturz .. Absicht Flagge?
Wenn der Absturz passiert, wird die App geschlossen, glaube ich, während eines Ruhe-Timers. Ein Fragment wird geöffnet, und der Benutzer kann auf Start klicken, wodurch ein Countdown von 90 Sekunden gestartet wird. Der Benutzer erhält eine Benachrichtigung, wenn der Timer endet, und wenn er angeklickt wird, sollte er den Benutzer zu dem offenen Fragment zurückbringen. Der Fehler tritt nicht oft auf, ich kann ihn nicht jedes Mal neu erstellen.
Hier wird der Stacktrace ist:
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
at android.content.ComponentName.<init>(ComponentName.java:77)
at android.content.Intent.<init>(Intent.java:4913)
at com.bestworkouts.sheikoworkout.Workouts.Week1Mon.showNotification(Week1Mon.java:171)
at com.bestworkouts.sheikoworkout.Workouts.Week1Mon$1.onFinish(Week1Mon.java:147)
at android.os.CountDownTimer$1.handleMessage(CountDownTimer.java:127)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:6938)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
und hier ist die Benachrichtigung, wo der Fehler (es sagt der Fehler bei Intent Absicht ist = new Intent (getActivity(), MyWorkout.class):
public void showNotification() {
NotificationCompat.Builder builder = new NotificationCompat.Builder(getContext());
builder.setSmallIcon(R.drawable.sheikoicon);
builder.setContentTitle("Sheiko Rest Timer");
builder.setContentText("Rest timer is up, start your set!");
builder.setDefaults(Notification.DEFAULT_SOUND|Notification.DEFAULT_VIBRATE);
builder.setAutoCancel(true);
Intent intent = new Intent(getActivity(), MyWorkout.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(getContext());
stackBuilder.addParentStack(MyWorkout.class);
stackBuilder.addNextIntent(intent);
PendingIntent pendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(pendingIntent);
NotificationManager NM = (NotificationManager) getActivity().getSystemService(Context.NOTIFICATION_SERVICE);
NM.notify(0, builder.build());
}
Wo ich den Countdown zu starten und rufen showNotification:
private void start() {
cancel();
mCountDownTimer = new CountDownTimer(90000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
txtViewRest.setText(millisUntilFinished/1000 + " Secs");
}
@Override
public void onFinish() {
txtViewRest.setText("Start!");
showNotification();
}
}.start();
}
ich frage mich, wenn ich Hat das etwas mit meinem FLAG_ACTIVITY_CLEAR_TOP zu tun?
Vielen Dank für Ihre Hilfe!
Ihr Code scheint in einem' CountDownTimer' zu laufen, könnte es sein, dass 'getActivity()' 'null' zurückgibt, weil es von einem anderen Thread aufgerufen wird? – MohanadMohie
Vielleicht bin ich ziemlich neu in Android, aber ich habe den Code hinzugefügt, wo ich den Timer starte und showNotification-Methode aufrufen, wenn das hilft – LBJ33
Wie @MohanadMohie sagte, Sie sind innerhalb des CountDownTimer-Kontext, so wird getActivity() Null zurückgeben dieser Fall. Sie sollten den Aktivitätskontext an die showNotification() -Methode übergeben. – Shadesblade