最近、アプリケーションのクラッシュが発生しています。インテントのフラグが原因である可能性がありますか?Androidアプリクラッシュ..意図フラグ?
クラッシュが発生すると、休憩時間中にアプリが閉じられたと思います。フラグメントが開かれた後、ユーザーは開始をクリックして90秒のカウントダウンタイマーを開始することができます。タイマーが終了すると、ユーザーは通知を受け取ります。タイマーがクリックされると、ユーザーは開いたフラグメントに戻ります。エラーは頻繁に起こることはなく、毎回それを再現することはできません。ここで
がスタックトレースです: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)
、ここでエラーが通知される(それはエラーがテントの意図=新しいテント(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());
}
私はカウントダウンタイマーを起動し、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();
}
をFLAG_ACTIVITY_CLEAR_TOPに何か関係がありますか?
ありがとうございました!
、 'getActivity()'が別のスレッドから呼び出されているので 'null'を返している可能性がありますか? – MohanadMohie
おそらく、私はかなりAndroidに慣れていますが、私はタイマーを起動してshowNotificationメソッドを呼び出すコードを追加しました。 – LBJ33
@MohanadMohieのように、あなたのCountDownTimerのコンテキスト内にあるので、getActivity()はnullを返しますこの場合。アクティビティのコンテキストをshowNotification()メソッドに渡す必要があります – Shadesblade