亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從 setOnChronometerTickListener() 重置時計時器崩潰

從 setOnChronometerTickListener() 重置時計時器崩潰

拉丁的傳說 2022-11-02 17:15:58
我正在嘗試setOnChronometerTickListener()在計時器達到特定時間(在本例中為 5 秒)時重置計時器。但是,當我在手機上運行它時它會崩潰。我正在使用這個問題的解決方案來重置計時器。我嘗試將計時器重置為不同的值,但它仍然崩潰chronometer.setBase(SystemClock.elapsedRealtime());這就是我實現它的方式:chrono.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {      @Override      public void onChronometerTick(Chronometer chronometer) {              if(chronometer.getText().toString().equalsIgnoreCase("00:05")) {                        // Reset Chronometer                        chronometer.stop();                        chronometer.setBase(SystemClock.elapsedRealtime());              }      }});這是我從 Logcat 收到的錯誤消息:2019-05-02 14:47:39.469 13143-13143/com.example.pomodoro_2 E/AndroidRuntime: FATAL EXCEPTION: main    Process: com.example.pomodoro_2, PID: 13143    java.lang.StackOverflowError: stack size 8MB        at android.widget.Chronometer.updateRunning(Chronometer.java:321)        at android.widget.Chronometer.stop(Chronometer.java:252)        at com.example.pomodoro_2.MainActivity$3.onChronometerTick(MainActivity.java:88)        at android.widget.Chronometer.dispatchChronometerTick(Chronometer.java:347)        at android.widget.Chronometer.setBase(Chronometer.java:176)我從這個錯誤消息中假設我溢出了堆棧,但我不知道為什么并且沒有看到類似的錯誤。提前致謝。
查看完整描述

1 回答

?
慕標琳琳

TA貢獻1830條經驗 獲得超9個贊

如果您在 if 條件中放置一個日志,您會在 00:05 之后在 logcat 中看到該日志。我通過從計時器上移除監聽器來防止它。


chrono.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {

      @Override

      public void onChronometerTick(Chronometer chronometer) {

              if(chronometer.getText().toString().equalsIgnoreCase("00:05")) {

                        // Reset Chronometer

                        chronometer.setOnChronometerTickListener(null);

                        chronometer.stop();

                        chronometer.setBase(SystemClock.elapsedRealtime());



              }

      }

});

但是如果你需要這個監聽器,你可以從Chronometer.OnChronometerTickListener實現你的片段并實現 OnChronometerTickListener ,如下所示:


  public class MainActivity extends AppCompatActivity implements Chronometer.OnChronometerTickListener {


    private String TAG = "MainActivity";

    Button start;

    Chronometer chronometer;


    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        chronometer = findViewById(R.id.chron);

        start = findViewById(R.id.btn);

        start.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                chronometer.start();

            }

        });

        chronometer.start();

        chronometer.setOnChronometerTickListener(this);


    }


    @Override

    public void onChronometerTick(Chronometer chronometer) {

        if (chronometer.getText().toString().equalsIgnoreCase("00:05")) {

            // Reset Chronometer

            chronometer.setOnChronometerTickListener(null);

            chronometer.stop();

            Log.d(TAG, "onChronometerTick: stop");


            chronometer.setBase(SystemClock.elapsedRealtime());

            chronometer.setOnChronometerTickListener(this);



        }


    }

}


查看完整回答
反對 回復 2022-11-02
  • 1 回答
  • 0 關注
  • 116 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號