Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Delphian
0 / 0 / 0
Регистрация: 14.08.2012
Сообщений: 138
#1

Взаимодействие ExecutorService и Listener

09.05.2017, 16:23. Просмотров 193. Ответов 3
Метки нет (Все метки)

Всем привет.

Хотел спросить, кто как решает такой вопрос. Допустим есть регистрация, которая запускается в ExecutorService. Внутри ES есть Listener и получается такая проблема, что ES завершается раньше, чем Listener получает результаты операции (регистрации пользователя). Как в таком случае лучше поступать, как корректно дождаться результатов, а уже потом завершить ES?

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
boolean isGetAuth;
 
public void click(){
        getAuthTask  = getExecutorService().submit(new Callable<Boolean>() {
                @Override
                public Boolean call() throws Exception {
                    signInUser(mEmail, mNickname);
                    return isGetAuth;
                }
           });
 
         while (!getAuthTask.isDone()){
                Thread.sleep(3000);
         }
}
 
private void signInUser(final String email, final  String nickname){
 
        mAuth.signInWithEmail(email, nickname)
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if(task.isSuccessful()){
                                isGetAuth = true;
                        }
                    }
          }
}
isGetAuth почти всегда false
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2017, 16:23
Ответы с готовыми решениями:

ExecutorService
Подскажите, пожалуйста, есть ли возможность, узнать сколько потоков занято...

Service, ExecutorService или что-то другое?
Добрый день. Столкнулся с таким вопросом, есть листенер, который...

Listener и RSS
Здравствуйте! Начинаю изучать программирование на java под android. В качестве...

Listener SQLite
Если какой нибудь стандпртный слушатель изменений в SQLite android. Ну например...

Listener в OnPostExecute ?
Дратуте! Подскажите, пожалуйста, по такой ситуации: AsyncTask парсит данные и...

3
Pablito
2665 / 2147 / 729
Регистрация: 12.05.2014
Сообщений: 7,492
Завершенные тесты: 1
09.05.2017, 16:25 #2
у Callable который возвращает метод submit есть метод get() он блокирует поток пока callable не отработает
то есть цикл со слипом можно заменить на вызов get() на callable
0
Delphian
0 / 0 / 0
Регистрация: 14.08.2012
Сообщений: 138
09.05.2017, 18:05  [ТС] #3
Паблито, спасибо, я пробовал делать

Java
1
2
3
if (getAuthTask.get()){
 
}
вместо while, но код просто исполняется в главном потоке и всё, то есть он не блокирует главный поток, а просто возвращает false

Добавлено через 3 минуты
Listener, скорее всего, выполняется в отдельном потоке и ExecutorService ничего о нём не знает поэтому и не ждёт окончания, а тупо продолжает дальше выполнять задачу, а потом выбрасывает false. Я так думаю, а возможно, где-то ошибка
0
Delphian
0 / 0 / 0
Регистрация: 14.08.2012
Сообщений: 138
13.05.2017, 16:06  [ТС] #4
Частично, эту задачу можно решить через Tasks.API, возможно, кому-то будет полезна эта либа, но так как у меня задача более многогранная и сложная, то пришлось совмещать разные методы решения.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.05.2017, 16:06

Статический listener
Всем привет! Немного затупил. Есть некий ListView, в котором хранятся...

Установить listener в потоке
Нужно установить listener, но нет возможности его установить на Activity, можно...

SearchView ругается на Listener?
Добрый день! подскажите что ему не нравится: @Override public boolean...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru