Java 3活动计时器产生空错误

Java 3活动计时器产生空错误,java,android,android-activity,null,Java,Android,Android Activity,Null,我有3项活动: 计时器设置,用于设置倒计时计时器启动的编号 计时器本身 按下后退按钮后激活 我的问题是,在暂停计时器活动(第三个)中,当按下恢复按钮时,应用程序显示空错误,但当按下主菜单按钮时,应用程序工作正常 第一项活动 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activ

我有3项活动:

  • 计时器设置,用于设置倒计时计时器启动的编号
  • 计时器本身
  • 按下后退按钮后激活
我的问题是,在暂停计时器活动(第三个)中,当按下恢复按钮时,应用程序显示空错误,但当按下主菜单按钮时,应用程序工作正常

第一项活动

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_timer_settings);
    final NumberPicker np = (NumberPicker)findViewById(R.id.numberPicker2);
    np.setMinValue(1);
    np.setMaxValue(999);
    np.setWrapSelectorWheel(false);

    final Button testbutton = (Button) findViewById(R.id.testbutton);
    testbutton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent testintent = new Intent(timer_settings.this, timer_2.class);
            Bundle timer2extras = new Bundle();
            timer2extras.putString("timer2string", np.getValue() + "");
            testintent.putExtras(timer2extras);
            startActivity(testintent);
        }
    });
}
第二项活动

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_timer_2);
    //...        
    Bundle timer2extras = getIntent().getExtras();
    String timer2string = timer2extras.getString("timer2string");
    starttime = Integer.parseInt(timer2string);
    starttimeup = starttime*60000;
    starttimedown = starttime*60000;
    int minutes_up_start = (int) (starttimeup / 1000) / 60;
    int seconds_up_start = (int) (starttimeup / 1000) % 60;
    String time_2_up_start_formatted = 
    String.format(Locale.getDefault(),"%02d:%02d", minutes_up_start, 
    seconds_up_start);
    timer_2_up.setText(time_2_up_start_formatted);

    int minutes_down_start = (int) (starttimedown / 1000) / 60;
    int seconds_down_start = (int) (starttimedown / 1000) % 60;
    String time_2_down_start_formatted = 
    String.format(Locale.getDefault(),"%02d:%02d", minutes_down_start, 
    seconds_down_start);
    timer_2_down.setText(time_2_down_start_formatted);
    //...


@Override
public void onBackPressed()
{
    startActivity(new Intent(timer_2.this, timer_2_pause.class));
}
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_timer_2_pause);
    this.setFinishOnTouchOutside(false);
    Button main = (Button)findViewById(R.id.button8);
    Button resu = (Button)findViewById(R.id.button7);
    main.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent mainintent = new Intent(timer_2_pause.this, main_menu.class);
            startActivity(mainintent);
        }
    });
    resu.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent resuintent = new Intent(timer_2_pause.this, timer_2.class);
            startActivity(resuintent);
        }
    });

}
第三项活动

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_timer_2);
    //...        
    Bundle timer2extras = getIntent().getExtras();
    String timer2string = timer2extras.getString("timer2string");
    starttime = Integer.parseInt(timer2string);
    starttimeup = starttime*60000;
    starttimedown = starttime*60000;
    int minutes_up_start = (int) (starttimeup / 1000) / 60;
    int seconds_up_start = (int) (starttimeup / 1000) % 60;
    String time_2_up_start_formatted = 
    String.format(Locale.getDefault(),"%02d:%02d", minutes_up_start, 
    seconds_up_start);
    timer_2_up.setText(time_2_up_start_formatted);

    int minutes_down_start = (int) (starttimedown / 1000) / 60;
    int seconds_down_start = (int) (starttimedown / 1000) % 60;
    String time_2_down_start_formatted = 
    String.format(Locale.getDefault(),"%02d:%02d", minutes_down_start, 
    seconds_down_start);
    timer_2_down.setText(time_2_down_start_formatted);
    //...


@Override
public void onBackPressed()
{
    startActivity(new Intent(timer_2.this, timer_2_pause.class));
}
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_timer_2_pause);
    this.setFinishOnTouchOutside(false);
    Button main = (Button)findViewById(R.id.button8);
    Button resu = (Button)findViewById(R.id.button7);
    main.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent mainintent = new Intent(timer_2_pause.this, main_menu.class);
            startActivity(mainintent);
        }
    });
    resu.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent resuintent = new Intent(timer_2_pause.this, timer_2.class);
            startActivity(resuintent);
        }
    });

}

您的活动二期望从意图中获得一些数据

Bundle timer2extras = getIntent().getExtras();
String timer2string = timer2extras.getString("timer2string");

您的
timer2extras
为空,当您尝试从中获取字符串时,会导致空指针异常。

通过更改onclick for resume修复了此问题:

 resu.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            finish();
        }
    });