Форум программистов, компьютерный форум CyberForum.ru

Не запускается AsyncTask - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Нужна помощь в разработке умного дома http://www.cyberforum.ru/android-dev/thread1385254.html
В общем вопрос такой:"Как сделать так, чтобы когда в этой строке(129):Speech.setText("Вы сказали: " +matches_text.get(position)); выводится "Вы сказали: 1" то система передаёт данные по блютус таким образом:{sendData("1");}??нужно реализовать это в условии if, но у меня ничего не вышло уже пару дней над этим сижу и никак. С кнопок данные передаёт, а из строки нет. Исходник ниже Добавлено через...
Программирование Android данные приложения Есть некоторые данные приложения типа картинок и текстовых файлов, необходимо что бы они устанавливались автоматически вместе с приложением. Я так понимаю их необходимо закидывать в папку res и там уже подпапки идут. Вопорос в том как правильно их туда закидывать и потом считывать ? 1) Я попробовал создать дополнительную папку в папке res - она у меня не нашлась. 2) Если изображения скидывать в... http://www.cyberforum.ru/android-dev/thread1385253.html
Реализация диалога android Программирование Android
Доброго времени суток. Решил написать простенький месседжер, и столкнулся с такой проблемой: Не знаю как это называется и как такое реализовать. Диалог между пользователями, как в вк или любом менеджере сообщений. Интересует как именно выводить сообщения таком образом. Сейчас они просто выводятся в listView, но это не красиво.
Самодельный File Explorer Программирование Android
Для более менее окончания проекта осталось пройти еще один квест. Написать самодельный File Explorer. Есть Активити1 при нажатии на кнопку, переходим в Активити2. Активити2 представляет из себя проводник, но показывает пользователю только файлы картинок. В Активити2 выбираем нужный файл, и возвращаем его полный путь через интент в Активити1, по клику на файле ну или фиг с ним по клику на...
Программирование Android Куда вставить готовый код в программе Android Studio? http://www.cyberforum.ru/android-dev/thread1385213.html
Вставил код из "Урок 58" ссылка - http://startandroid.ru/ru/uroki/vse-uroki-spiskom/117-urok-58-dialogi-timepickerdialog.html как теперь в этот код добавить "Урок 59" ссылка - http://startandroid.ru/ru/uroki/vse-uroki-spiskom/118-urok-59-dialogi-datepickerdialog.html т.е ответе: Экран main.xml: в конце какой строки начать вставлять код (код с урока 59) и с какой строки его брать
Программирование Android Вращение барабана слот машины Здравствуй, уважаемый формучанин. Делаю слот машину. Застрял на анимации вращения барабана (пример на скрине). Барабан состоит из 3 ячеек. Пробовал через ViewFlipper анимацию каждой ячейки по отдельности. Но, если вызывать метод startFlipping(), то после каждого воспроизведения анимации появляется пауза. Также видна незначительная рассинхронизация между тремя ячейками. Подскажите, как можно... подробнее

Показать сообщение отдельно
Serbis
3 / 3 / 2
Регистрация: 13.07.2012
Сообщений: 123

Не запускается AsyncTask - Программирование Android

01.03.2015, 16:53. Просмотров 287. Ответов 0
Метки (Все метки)

Вот такая вот проблема. Имеется такая вот довольно сложная архитектура. В Main_Activity объявлены экземпляры всех существующих классов. Отсюда же вызывается метод ParceCommand.start которые открывает новый поток и ждет от сервера команды, дождавшись вызывает функцию определения команды ParceCommand.processCommand, которая определив команду вызывает необходимую функцию, именно Core.set_geoloc_state, которая должна на основании настроек запустить SendGeoloc.start, в котором вызывается поток для цикличной отправки данных на сервер. Проблема в том, что запуск последнего потока игнорируется, но если вызвать метод Core.set_geoloc_state из главного класса все работает. Попахивает какой-то зависимостью, но я не могу понять какой. Код привожу максимально упрощенным.

Main_Acitivity
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class MainActivity extends ActionBarActivity {
    public ParceCommand parcer;
    public static Core core;
    public static SendGeoloc sendGeoloc;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        sendGeoloc = new SendGeoloc();
        core = new Core();
        parcer = new ParceCommand();
        parcer.start();
 
    }
}
ParceCommand
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
public class ParceCommand {
    public WaitCommand waitCommand;
 
    public ParceCommand() {
 
    }
 
    public void start() {
        waitCommand = new WaitCommand();
        waitCommand.execute();
    }
 
    private void processCommand(String command) {
                //Обрабатывает команду и вызывает подлежащий метод
                MainActivity.core.set_geoloc_state();
 
        }
    }
 
    class WaitCommand extends AsyncTask<Void, String, Void> {
 
        @Override
        protected Void doInBackground(Void... params) {
            int a = 0;      //Переменная для обхода проверки компилятора на бесконечный цикл
 
            while (true) {
                if (isCancelled()) break;
                    //Тут получаем от сервера команду и выводим ее через onProgressUpdate
                    publishProgress(command);
                }
 
                if (a==1) break;
            }
 
            return null;
        }
 
        @Override
        protected void onProgressUpdate(String... values) {
            super.onProgressUpdate(values);
            processCommand(values[0]);
        }
 
        @Override
        protected void onCancelled() {
            super.onCancelled();
        }
 
    };
Java
1
2
3
4
5
6
7
8
9
10
public class Core {
 
    public Core() {
       
 
    }
 
    public void set_geoloc_state(boolean state) {
        MainActivity.sendGeoloc.start();     //запускаем отправку геоднанных
    }
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
29
30
31
32
33
34
35
public class SendGeoloc {
    private SendCurrentGeoloc sendCurrentGeoloc;
 
    public SendGeoloc() {
        sendCurrentGeoloc = new SendCurrentGeoloc();
    }
 
    public void start() {
        sendCurrentGeoloc.execute();
    }
 
  class SendCurrentGeoloc extends AsyncTask<Void, String, Void> {
 
        @Override
        protected Void doInBackground(Void... params) {
            int a = 0;      //Переменная для обхота проверки компилятора на бесконечный циел
 
            while (true) {
                if (isCancelled()) break;
                
                //Тут внутренности потока
                
                if (a==1) break;
            }
 
            return null;
        }
 
 
        @Override
        protected void onCancelled() {
            super.onCancelled();
        }
 
    };
Добавлено через 11 минут
Ага, нашел, запрет на выполнение параллельных потоков. Т. е. получается что бы запустить последний поток, нужно сначала дождаться завершения первого, а этого невозможно, так как он же этот вызов и породил. Теперь вопрос, как в таком случае применить executeOnExecutor.

Добавлено через 5 минут
Все, проблема решена вызовом

Java
1
sendCurrentGeoloc.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
Стоило изложить проблему в письменно виде и она сразу же решается сама собой, и так уже не первый раз...
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru