Задать вопрос
Manitu_PC
@Manitu_PC

Как получить переменную long от NumberPicker?

В программировании я новичок. Есть задача написать таймер с двумя отсчетами (таймер Табата). Хочу задавать время отсчета с помощью NumberPicker. Не могу разобраться как от NumberPicker получить переменную типа long?
Вот код:
package com.example.fitness_application;

import android.os.Bundle;
import android.os.CountDownTimer;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.NumberPicker;
import android.widget.TextView;

import java.text.SimpleDateFormat;
import java.util.Date;


/**
 * Created by Денис on 28.02.2017.
 */
public class ActivityTimer extends AppCompatActivity {

    private TextView mTextField;
    private NumberPicker PickerSecWork;
    private NumberPicker PickerSecRest;
    long secWork;
    long secRest;
    boolean mIsRunning = false;
    int mCurrentPeriod = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_timer);

        mTextField = (TextView) findViewById(R.id.textView10);
        PickerSecWork = (NumberPicker) findViewById(R.id.PickerWO);
        PickerSecRest = (NumberPicker) findViewById(R.id.PickerR);
        PickerSecWork.setMinValue(0);
        PickerSecWork.setMaxValue(59);
        PickerSecRest.setMinValue(0);
        PickerSecRest.setMaxValue(59);
        PickerSecWork.setOnValueChangedListener(onValueChanged);
    }

    public void TimerWorkOut() {
        new CountDownTimer(secWork, 1000) {

            public void onTick(long millisUntilFinished) {
                mTextField.setText(" " + millisUntilFinished / 1000);
            }

            public void onFinish() {
                mTextField.setText("Rest!");
            }
        }.start();
    }

    public void TimerRest() {
        new CountDownTimer(secRest, 1000) {

            public void onTick(long millisUntilFinished) {
                mTextField.setText(" " + millisUntilFinished / 1000);
            }

            public void onFinish() {
                mTextField.setText("Just do it!");
            }
        }.start();
    }

    public void ClickStart(View view) {
        TimerWorkOut();
        if(secWork == 0) {
            TimerRest();
        }
    }

    public void ClickCancel(View v) {

    }

    NumberPicker.OnValueChangeListener onValueChanged = new NumberPicker.OnValueChangeListener() {
        @Override
        public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
            if (!mIsRunning) {
                mTextField.setText(intToTime(newVal));
                mCurrentPeriod = newVal;
            }
            int value = PickerSecWork.getValue();
            secWork = Integer.parseInt(String.valueOf(value));
        }
    };

    private String intToTime(int i) {
        return (new SimpleDateFormat("ss")).format(new Date(i * 1000));
    }
}
  • Вопрос задан
  • 197 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
SonnySP
@SonnySP
Very Junior Java
Может я не так понял вопрос. Обязательна переменная типа long?
Ну и вот в этом месте
int value = PickerSecWork.getValue();
secWork = Integer.parseInt(String.valueOf(value));

Ты сначала получаешь intовое значение от PickerSecWork, потом преобразуешь его в строку, и опять из строки парсишь int.

Если нужно long, то...
//Расширяющее преобразование. Можно даже без cast
secWork = PickerSecWork.getValue();

Или
int value = PickerSecWork.getValue();
secWork = Long.parseLong(String.valueOf(value));
//или secWork = Long.valueOf(String.valueOf(value));
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы