2017-08-28 5 views
0

こんにちは、私はアンドロイドで新しく、アプリケーションを開発するときに問題があります。Androidスタジオで終了する前に実行中のメソッドを停止する方法

私はタイマーと閉じるボタン付きのモーダルを持っています。タイマーが終了すると、モーダルは閉じるか、タイマーがクローズボタンで終了する前にモーダルを閉じます。ここで絵: enter image description here

しかし、私はプレスを使用して手動で閉じるボタン、まだ実行されているタイマーを実行し、モーダルがすでに閉じているが、モーダルをクローズしようとしましたメソッドをモーダルを閉じ問題、これが原因とされ、私のアプリケーションがクラッシュしました。エラーがある

java.lang.NullPointerExceptionが:ヌル オブジェクト参照に ')java.lang.Stringでandroid.content.Context.getPackageNameを(' 仮想メソッドを呼び出す試み

方法閉じるボタンを押すとメソッドを停止できますか?ここで

タイマーが上にあるときに、モーダルを閉じるように私のタイマー方法:

public void startTimer(){ 
     int hoursToGo = 0; 
     int minutesToGo = 0; 
     int secondsToGo = 10; 

    int millisToGo = secondsToGo*1000+minutesToGo*1000*60+hoursToGo*1000*60*60; 

    new CountDownTimer(millisToGo,1000) { 

     @Override 
     public void onTick(long millis) { 
      int seconds = (int) (millis/1000) % 60 ; 
      int minutes = (int) ((millis/(1000*60)) % 60); 
      String text = String.format("%02d:%02d",minutes,seconds); 
      tv.setText(text); 
     } 

     @Override 
     public void onFinish() { 
      tv.setText("Request Timeout"); 
     } 
    }.start(); 

    final AlertDialog d = (AlertDialog) getDialog(); 
    final Timer timer2 = new Timer(); 
    timer2.schedule(new TimerTask() { 
     public void run() { 
      d.dismiss(); 
      timer2.cancel(); //this will cancel the timer of the system 

      Intent i = new Intent(getActivity(), PromoActivity.class); 
      i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      getActivity().startActivityForResult(i,0); 
     } 
    }, 10000); 
} 

私はここでメソッドを実行します。

public void onResume(){ 
    super.onResume(); 

    startTimer(); 
} 
+0

あなたはどこでもあなたのコード内でgetPackageName()メソッドを使用していますか?はいの場合は、そのコードもアップロードしてください。そうでない場合は、このNullPointerExceptionが指している行を、クラッシュログの次の行に記述するかどうかを教えてください。 android.content.ComponentNameの –

+0

(ComponentName.java:128) android.content.Intentにあります。 com.sharpcs2.android.ui.fragment.BarcodeModalFragment $ 3.runで(Intent.java:4667) java.util.Timer $ TimerImpl.runで(BarcodeModalFragment.java:151) (Timer.java:284) –

+0

BarcodeModalFragment .java:151は: インテントi =新しいインテント(getActivity()、PromoActivity.class); –

答えて

1

あなたは閉じるボタン

0

手順の下に試してみてください。

CountDownTimerインスタンスを割り当てます。変数、例えばあなたはそれを停止したいとき

CountDownTimer cdt = new CountDownTimer(millisToGo,1000) 

...その後、呼び出し

cdt.cancel() 

わからないあなたは別のTimerインスタンスを必要とする理由、あなたはそれを削除し、

CountDownTimer onFinish() 
+0

onFinishに入れるべきコードはどこですか? –

0
でそのコードを置く必要があります

TimerTaskで参照を保持し、myTimerTask.cancel()を呼び出します。

0

を押したとき、すなわち

  1. はクラス変数のコンテキストを作成し、それがonCreateViewの値です与える取得している場合NullPointerExceptionために、次の代わりgetActivity()を使用してくださいtimer2.cancel();を呼び出す必要があります()のフラグメントの例:

    Context context; //クラス変数

    context = getActivity(); // onCreateView内側()

  2. Intent i = new Intent(context, PromoActivity.class);

+0

エラーが発生しても、シンボル –

+0

を解決できません@NishikinoMaki編集しました! –

関連する問題