Невозможно вызвать строку из OnTimeSetListener - PullRequest
0 голосов
/ 08 февраля 2019

Я добавил TimePicker в свое приложение.Выбранное время отображается полностью в TextView, но я не могу вызвать строку позже, чтобы отправить ее на сервер.

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

    mArrivalTimepicker = new TimePickerDialog.OnTimeSetListener() {
        @Override
        public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
            String ArrivalTimeString = hourOfDay + ":" + minute;
            TextView ArriavalTime = findViewById(R.id.arrival_time_tv);
            ArriavalTime.setText(ArrivalTimeString);
        }
    };
}

Когда я позже пытаюсь вызвать его, он говорит: «Не удается разрешить символ»ArrivalTimeString '.

public void addMessage() {
    String arrivalTime = ArrivalTimeString;
}

Спасибо за помощь!

Редактировать: Теперь я объявил String глобальным.Теперь я могу вызвать строку, но ее значение все еще пусто.

String ArrivalTimeString;

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

mArrivalTime = findViewById(R.id.arrival_time_tv);

mArrivalTimepicker = new TimePickerDialog.OnTimeSetListener() {
        @Override
        public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
            ArrivalTimeString = hourOfDay + ":" + minute;
        }
    };
mArrivalTime.setText(ArrivalTimeString);
}

Поэтому после выбора времени оно все равно не будет отображать выбранное время.

Решение: я все еще вызываю.setText в пределах .OnTimeSetListener.Чтобы использовать строку позже, я использую

ArrivalTimeString = mArrivalTime.getText().toString();

Ответы [ 3 ]

0 голосов
/ 08 февраля 2019

String ArrivalTimeString = hourOfDay + ":" + минута;Над строкой должно быть String ArrivalTimeString = String.valueOf (hourOfDay) + ":" + String.valueOf (minute);Также вы не можете использовать String ArrivalTimeString в других функциях, поскольку вы объявляете это во встроенном классе.Лучше всего сделать это поле / переменная класса.

0 голосов
/ 08 февраля 2019
String ArrivalTimeString;
TextView ArriavalTime;

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

    ArriavalTime = findViewById(R.id.arrival_time_tv);

    mArrivalTimepicker = new TimePickerDialog.OnTimeSetListener() {
        @Override
        public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
            ArrivalTimeString = hourOfDay + ":" + minute;
            ArriavalTime.setText(ArrivalTimeString);
        }
    };
}

Если вы хотите повторно использовать ArrivalTimeString вне метода onTimeSet(), вам следует заменить его на глобальную переменную вместо локальной.

Когда вы создали свой ArrivalTimeString внутри onTimeSet(), вы создаете его как локальную переменную.Локальная переменная будет жить только до конца метода, в котором вы ее объявили, поэтому, как только вы достигнете конца onTimeSet(), переменная ArrivalTimeString уже исчезнет.

Таким образом, вы получите ошибку cannot resolve Symbol 'ArrivalTimeString' при попытке использовать ArrivalTimeString в других методах.

Это потому, что ваша ArrivalTimeString просто больше не существует, потому что метод, в котором он был создан, уже завершен.

Следовательно, исправление для этого заключается в объявлении переменной ArrivalTimeString в качестве глобальной переменной.Помещая переменную вне методов, вы заставляете «жизнь» переменной существовать до тех пор, пока класс еще жив.

Кроме того, вам следует избегать использования findViewById() внутри вашего OnTimeSetListener().Поиск представления по Id может быть дорогостоящим процессом, поэтому, если вы собираетесь часто обращаться к TextView, вам также следует объявить ArriavalTime за пределами OnTimeSet().Это позволяет вашему приложению постоянно искать вид каждый раз, когда устанавливается время.

PS Я полагаю, у вас может быть опечатка для TextView ArriavalTime.

0 голосов
/ 08 февраля 2019

String birthTime = ArrivalTime.getText (). ToString ();Если назначенная строка и отображаемая строка совпадают.
Никогда не объявляйте представление внутри любого выбора времени или даты.Он должен быть в методе onCreate (), иначе вы не получите данные из этого текстового представления вне вашего таймера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...