Возвращаемое значение из таймера обратного отсчета

Мне нужно вернуть значение из моего countdowntimer, чтобы я мог обновить textView. Я не уверен, как я могу это сделать, я добавил комментарий, где я пытался добавить возврат, но не повезло.

public class BrewTimer extends Activity{

        public String secsRemain = "not set";

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            System.out.println("Timer Created, we're in the onCreate Method.");
        }

        public void startBrewTimer(long remaningMillis) {
            // Start the Brew Timer
            System.out.println("Timer object fired!");

            new CountDownTimer(remaningMillis, 1000) {

                public void onTick(long millisUntilFinished) {
                    secsRemain = "seconds remaining: " + millisUntilFinished / 1000;
                    System.out.println(secsRemain);

                    return secsRemain; // <-- This is what I want to do
                }

                public void onFinish() {
                    System.out.println("Timer Finished!!!");
                }
            }.start();
        }

        public void stopBrewTimer() {
            //Stop the Brew Timer
        }

        }

Ответ 1

Мне нужно вернуть значение из моего countdowntimer, чтобы я мог обновить TextView.

Нет необходимости делать это. Он работает на нити ui. Вы можете обновить текст в onTick самостоятельно.

Пример:

public class MainActivity extends Activity { 
TextView tv;
  public String secsRemain = "not set";
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    tv = (TextView) findViewById(R.id.textView1);
    startBrewTimer(200000);     
}
private void startBrewTimer(long remaningMillis){
    CountDownTimer counter = CountDownTimer(remaningMillis, 1000){
        public void onTick(long millisUntilDone){
        secsRemain = "seconds remaining: " + millisUntilFinished / 1000; 
          tv.setText(secsRemain);                    
        }

        public void onFinish() {
            tv.setText("DONE!");

        }
    }.start();
}
 }

Ответ 2

Вы можете получать значения через широковещательный приемник...... следующим образом: Сначала создайте свой собственный IntentFilter as,

    Intent intentFilter=new IntentFilter();
    intentFilter.addAction("YOUR_INTENT_FILTER");

Затем создайте внутренний класс BroadcastReceiver as,

private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
    /** Receives the broadcast that has been fired */
    @Override
    public void onReceive(Context context, Intent intent) {
        if(intent.getAction()=="YOUR_INTENT_FILTER"){
           //HERE YOU WILL GET VALUES FROM BROADCAST THROUGH INTENT EDIT YOUR TEXTVIEW///////////
           String receivedValue=intent.getStringExtra("KEY");
        }
    }
};

Теперь зарегистрируйте свой широковещательный приемник в onResume() как,

registerReceiver(broadcastReceiver, intentFilter);

И, наконец, отмените регистрацию BroadcastReceiver в onDestroy() как,

unregisterReceiver(broadcastReceiver);

Теперь самая важная часть... Вам нужно запустить широковещательную рассылку туда, где вам нужно отправить значения..... так, как,

Intent i=new Intent();
i.setAction("YOUR_INTENT_FILTER");
i.putExtra("KEY", "YOUR_VALUE");
sendBroadcast(i);

Не забудьте принять мой ответ, если вы найдете это удовлетворительным.... cheers:)