Будущая задача не работает должным образом (Android)

Я хочу сделать «поиск» текста, который будет выглядеть так: «Загрузка». -> "Загрузка .."-> "Загрузка ..."

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

Я попытался реализовать это следующим образом:

ExecutorService threadPoolExecutor = Executors.newSingleThreadExecutor();
Future textAnimationTaskFuture;
Runnable textAnimationTask;

textAnimationTask = new Runnable() {
            @Override
            public void run() {
                int passedTime = 0;
                while(passedTime < 3000)
                {
                    if(passedTime < 1000){         
                       textView.setText("Loading.");
                    }
                    else if(passedTime >= 1000 && passedTime < 2000 )
                    {
                       textView.setText("Loading..");
                    }else if (passedTime >= 3000)
                    {
                       textView.setText("Loading...");
                    }
                    passedTime = passedTime + 1;
                    if( passedTime == 3000 )
                        passedTime = 0;
                }
            }
        };

И тогда я бы запустил процесс:

 textAnimationTaskFuture = threadPoolExecutor.submit(textAnimationTask);

И отменить его:

 textAnimationTaskFuture.cancel(true);
 textView.setText("Found.);

К сожалению, цикл не останавливается при отмене (true).


person BVtp    schedule 29.12.2016    source источник


Ответы (1)


Я точно не знаю, почему это непоследовательно, но у вас есть одна очевидная проблема: вы пытаетесь изменить представление из потока, а не из потока пользовательского интерфейса. Для того, чтобы установить текст на свой вид, вам нужно сделать следующее:

 runOnUiThread(new Runnable() {
        @Override
        public void run() {
            textView.setText("MY_TEXT");
        }
    });

Что касается того, что цикл не останавливается - я предлагаю вам отладить его, глядя на код, я не могу обнаружить никаких проблем с циклом.

person yakobom    schedule 29.12.2016
comment
пытался отладить, к сожалению, не могу найти проблему.. Думал, может, я что-то делаю не так.. :/ - person BVtp; 29.12.2016
comment
Хммм... Взгляните сюда, возможно, это поможет вам: stackoverflow.com/questions/13623445/ - person yakobom; 29.12.2016