Java 从另一个活动重新启动倒计时
我有以下代码来创建倒计时:Java 从另一个活动重新启动倒计时,java,android,Java,Android,我有以下代码来创建倒计时: CountDownTimer CountdownTimer = new CountDownTimer(30000, 1000) { public void onTick(long millisUntilFinished) { txttime.setText(millisUntilFinished / 1000 ); } public void onFinish(){ timeout_stage(); } }.start() 它工作正常
CountDownTimer CountdownTimer = new CountDownTimer(30000, 1000) {
public void onTick(long millisUntilFinished) {
txttime.setText(millisUntilFinished / 1000 );
}
public void onFinish(){
timeout_stage();
}
}.start()
它工作正常,我可以取消并完美地启动它,但我想从另一个活动重新启动它。在主窗体i Cancel中,活动会像对话框一样打开,其中有一个“再次”按钮。当我点击它时,我想要倒计时;我的计数器再次启动
我怎么能做到
我在第二个活动中这样做:
MainActivity main = new MainActivity();
main.CountdownTimer.start();
但我得到了这个错误:
04-28 11:42:40.495: E/AndroidRuntime(17039): FATAL EXCEPTION: main
04-28 11:42:40.495: E/AndroidRuntime(17039): java.lang.NullPointerException
04-28 11:42:40.495: E/AndroidRuntime(17039): at com.english.game.MainActivity$1.onTick(MainActivity.java:70)
04-28 11:42:40.495: E/AndroidRuntime(17039): at android.os.CountDownTimer$1.handleMessage(CountDownTimer.java:124)
04-28 11:42:40.495: E/AndroidRuntime(17039): at android.os.Handler.dispatchMessage(Handler.java:99)
04-28 11:42:40.495: E/AndroidRuntime(17039): at android.os.Looper.loop(Looper.java:137)
04-28 11:42:40.495: E/AndroidRuntime(17039): at android.app.ActivityThread.main(ActivityThread.java:5041)
04-28 11:42:40.495: E/AndroidRuntime(17039): at java.lang.reflect.Method.invokeNative(Native Method)
04-28 11:42:40.495: E/AndroidRuntime(17039): at java.lang.reflect.Method.invoke(Method.java:511)
04-28 11:42:40.495: E/AndroidRuntime(17039): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
04-28 11:42:40.495: E/AndroidRuntime(17039): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
04-28 11:42:40.495: E/AndroidRuntime(17039): at dalvik.system.NativeStart.main(Native Method)
public class Activity1 extends Activity {
public static Handler mHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initHandler();
mHandler.sendEmptyMessage(1);
startActivity(new Intent(Activity1.this, Activity2.class));
}
private void initHandler(){
mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.arg1) {
case 1:
mCountDownTimer.start();
break;
}
}
};
}
private CountDownTimer mCountDownTimer = new CountDownTimer(10000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
Toast.makeText(Activity1.this, "Count is: "+ millisUntilFinished/1000, Toast.LENGTH_SHORT).show();
}
@Override
public void onFinish() {
// TODO Auto-generated method stub
}
};
}
public class Activity2 extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Activity1.mHandler.sendEmptyMessage(1);
}
}
Activity2.java
public class Activity1 extends Activity {
public static Handler mHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initHandler();
mHandler.sendEmptyMessage(1);
startActivity(new Intent(Activity1.this, Activity2.class));
}
private void initHandler(){
mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.arg1) {
case 1:
mCountDownTimer.start();
break;
}
}
};
}
private CountDownTimer mCountDownTimer = new CountDownTimer(10000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
Toast.makeText(Activity1.this, "Count is: "+ millisUntilFinished/1000, Toast.LENGTH_SHORT).show();
}
@Override
public void onFinish() {
// TODO Auto-generated method stub
}
};
}
public class Activity2 extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Activity1.mHandler.sendEmptyMessage(1);
}
}
这个示例代码是唯一的想法做,请使用这个逻辑,让我知道如果有任何问题来 我不确定,因为没有足够的代码来进行适当的分析,但对我来说,这些行看起来是错误的:
MainActivity main = new MainActivity();
main.CountdownTimer.start();
以这种方式初始化主活动时,不会调用任何活动生命周期方法(onCreate()、onStart()等)。我猜,txttime
(标签?)是在onCreate()中初始化的
此外(更糟糕的是),您不会重新启动实际主活动中使用的计时器
为了确保您在第二个活动中有正确的主活动,我建议您使用中的代码。在
onTick
中的MainActivity
的第70行,您得到了一个NullPointerException
,该行是什么?这是:txttime.setText(millisuntillfinished/1000);但是,当我在同一个活动中调用它时,它可以完美地工作。我这样做,但即使在活动1 mHandler.sendEmptyMessage(1)中也是如此;不起作用,handleMessage不被解雇!请帮助我亲爱的朋友,我困惑了两天