2017-08-28 201 views
0

您好我是Android新手,在开发我的应用程序时遇到问题。如何在Android Studio中完成之前停止运行方法

我有一个模式与计时器和关闭按钮。当定时器结束时,模式将关闭,或在关闭按钮结束计时器之前关闭模式。这里的图片: 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) at android.content.Intent。 (Intent.java:4667) 在com.sharpcs2.android.ui.fragment.BarcodeModalFragment $ 3.run(BarcodeModalFragment.java:151) 在java.util.Timer中的$ TimerImpl.run(Timer.java:284) –

+0

BarcodeModalFragment.java:151 is: Intent i = new Intent(getActivity(),PromoActivity.class); –

回答

1

你必须调用timer2.cancel();当你按下关闭按钮

0

尝试以下步骤:

分配CountDownTimer实例变量,例如

CountDownTimer cdt = new CountDownTimer(millisToGo,1000) 

...然后当你想停止它,请拨打

cdt.cancel() 

不知道为什么你需要另一个Timer实例,你应该将其删除,并把这些代码在

CountDownTimer onFinish() 
+0

哪里应该放在完美的代码? –

0

在你的TimerTask上保留一个引用并在其上调用myTimerTask.cancel()。

0

请使用以下代替getActivity()的NullPointerException异常,你越来越即

  1. 创建一个类变量的上下文,并给它在onCreateView值()你的片段即

    Context context; //类变量

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

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

+0

得到错误无法解析符号 –

+0

@NishikinoMaki编辑! –

相关问题