Получение значения из 3 текстовых представлений и преобразование в int для таймера обратного отсчета

В настоящее время у меня есть три текстовых представления, которые я использую для таймера обратного отсчета в моем приложении для Android в HH: MM: SS. (часы, минуты и секунды). Я разрешаю пользователю установить для текстовых представлений определенное число на время. Затем я пытаюсь получить значение из текстовых представлений, преобразовав его в int, а затем используя целочисленные значения в качестве секунд для таймера обратного отсчета. Но проблема в том, что для целых чисел нет значений, и поэтому таймер не может запуститься.

введите описание изображения здесь

Когда пользователь перемещает ползунок, он может изменять значение textview на часы, минуты или секунды:

Вот код для этого в моем методе onCreate:

  @Override
                        public void onProgressChanged(SeekArc seekArc, int progress,
                                                      boolean fromUser) {

                            int progress_count = 0;

                            for (int i=0;i<24;i=i+1)
                            {

                                if (progress ==120) {
                                    mSeekArcProgress.setText("24");

                                }
                                else if (progress == progress_count)
                                {
                                    mSeekArcProgress.setText(String.valueOf(String.format("%02d",i)));
                                }

                                progress_count = progress_count + 5;



                            }
                        }
                    });
                } else if (v.getId() == R.id.minutetext) {
                    //corresponding button logic should below here

                    mSeekArc.setOnSeekArcChangeListener(new SeekArc.OnSeekArcChangeListener() {


                        @Override
                        public void onStopTrackingTouch(SeekArc seekArc) {
                        }
                        @Override
                        public void onStartTrackingTouch(SeekArc seekArc) {
                        }


                        //This sets the actual string for the minutes
                        @Override
                        public void onProgressChanged(SeekArc seekArc, int progress,
                                                      boolean fromUser) {
                            int progress_count = 0;

                            for (int i=0;i<120;i++)
                            {

                                 if (progress ==120) {
                                     mSeekArcMinuteProgress.setText("00");

                                 }
                                else if (progress == progress_count)
                                {
                                    mSeekArcMinuteProgress.setText(String.valueOf(String.format("%02d",i)));
                                }

                                progress_count = progress_count + 2;


                            }

                        }
                    });
                } else if (v.getId() == R.id.secondtext) {
                    //corresponding button logic should below here
                    mSeekArc.setOnSeekArcChangeListener(new SeekArc.OnSeekArcChangeListener() {

                        @Override
                        public void onStopTrackingTouch(SeekArc seekArc) {
                        }
                        @Override
                        public void onStartTrackingTouch(SeekArc seekArc) {
                        }


                        //This sets the actual string for the seconds
                        @Override
                        public void onProgressChanged(SeekArc seekArc, int progress,
                                      boolean fromUser) {



                            // so ur setting it to HALF of what "progress" is = to

                            int progress_count = 0;

                            for (int i=0;i<60;i++)
                            {


                                if (progress ==120) {
                                    mSeekArcSecondProgress.setText("00");

                                }
                                else if (progress == progress_count)
                                {
                                    mSeekArcSecondProgress.setText(String.valueOf(String.format("%02d",i)));
                                }

                                progress_count = progress_count + 2;


                            }

                        }
                    });
                }

Идентификаторы TextView упоминаются в следующем коде, который находится в моем методе setActionListener для таймера обратного отсчета:

  private void setActionListeners() {

        // IT IS RIGHT BELOW CHECK IT OUT.



        number_text = (TextView) findViewById(R.id.hour_progress_number);
        minute_text = (TextView) findViewById(R.id.minute_progress_number);
        second_text = (TextView) findViewById(R.id.second_progress_number);

         hourint = Integer.valueOf(number_text.getText().toString());

         minuteint = Integer.valueOf(minute_text.getText().toString());

         secondint = Integer.valueOf(second_text.getText().toString());




        totalTimeCountInMilliseconds = ((hourint*60*60) +(minuteint*60) + (secondint)) * 1000;      // time count for 3 minutes = 180 seconds
        timeBlinkInMilliseconds = totalTimeCountInMilliseconds/1000;



        start_timer.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

               // textViewShowTime.setTextAppearance(getApplicationContext(), R.style.normalText);

                countDownTimer = new CountDownTimer(totalTimeCountInMilliseconds, 500) {
                    // 500 means, onTick function will be called at every 500 milliseconds

                    @Override
                    public void onTick(long leftTimeInMilliseconds) {
                        long seconds = leftTimeInMilliseconds / 1000;
                        mSeekArc.setVisibility(View.INVISIBLE);





                        if ( leftTimeInMilliseconds < timeBlinkInMilliseconds ) {
                           // textViewShowTime.setTextAppearance(getApplicationContext(), R.style.blinkText);
                            // change the style of the textview .. giving a red alert style

                            if ( blink ) {
                                number_text.setVisibility(View.VISIBLE);
                                minute_text.setVisibility(View.VISIBLE);
                                second_text.setVisibility(View.VISIBLE);


                                // if blink is true, textview will be visible
                            } else {
                                number_text.setVisibility(View.INVISIBLE);
                                minute_text.setVisibility(View.INVISIBLE);
                                second_text.setVisibility(View.INVISIBLE);


                            }

                            blink = !blink;         // toggle the value of blink
                        }



                        second_text.setText(String.format("%02d", seconds % 60));
                        minute_text.setText(String.format("%02d", seconds / 60));
                        number_text.setText(String.format("%02d", seconds / 3600));                     // format the textview to show the easily readable format
                    }




                    @Override
                    public void onFinish() {
                        // this function will be called when the timecount is finished
                        //textViewShowTime.setText("Time up!");
                        number_text.setVisibility(View.VISIBLE);
                        minute_text.setVisibility(View.VISIBLE);
                        second_text.setVisibility(View.VISIBLE);
                        mSeekArc.setVisibility(View.VISIBLE);
                    }

                }.start();

            }
        });
    }

Таймер работает. Я поставил явное целочисленное значение для totalTimeCountInMilliseconds; однако, когда я использую hourint, minuteint и secondint, значение, вероятно, равно нулю, потому что таймер не запускается, и это кажется единственной действительной причиной.

Я не уверен, что делать, чтобы это исправить, чтобы получить целочисленные значения и заставить таймер работать.

РЕДАКТИРОВАТЬ: Pastebin для ссылки с полным кодом: http://pastebin.com/1wcXHdvX


person Rohit Tigga    schedule 27.07.2014    source источник


Ответы (1)


Ты можешь использовать

Log.i("YourActivity","Seconds: " + secondsint); 

чтобы проверить, какие значения вы получаете из текстовых представлений.

Не забудьте добавить импорт. Вы можете использовать Ctrl + Shift + O и выбрать импорт Android Logcat.

РЕДАКТИРОВАТЬ1:

Я посмотрел ваш код, и вы вызываете setActionListeners () в своем OnCreateMethod (). Это не имеет смысла! setActionListeners () получает значения из TextView от пользователя. Но пользователь не может вводить значения, когда система инициализирует действие. Итак, позвоните своему setActionListeners() сюда:

start_timer.setOnClickListener(new View.OnClickListener() {

   setActionListeners();

   @Override
   public void onClick(View view) {
      ...
   }
 ...
}

И переместите start_timer.setOnClickListener (новый View.OnClickListener () {...}) в onCreateMethod ()

person Vojtěch Pešek    schedule 27.07.2014
comment
Как мне получить правильную стоимость? - person Rohit Tigga; 27.07.2014
comment
Потому что я не намерен делать это равным нулю - person Rohit Tigga; 27.07.2014
comment
@XiJiaopin Отредактировал мой ответ. Вы должны посмотреть, что на самом деле делают Методы и как они работают. А также посмотрите официальную документацию Android API. - person Vojtěch Pešek; 28.07.2014
comment
Хорошо, я вижу. Сделаю. Также я получаю сообщение об ошибке в setActionListeners, говоря, что это недопустимое объявление метода, когда я перемещаю start_timer.setOnClickListener в onCreate. пытаюсь выяснить почему - person Rohit Tigga; 28.07.2014