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

AsyncTask как дождаться окончания - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Алгоритм распознавания форм на фото http://www.cyberforum.ru/android-dev/thread1214166.html
Здравствуйте, сотоварищи! Помогите найти или составить алгоритм/код для определения формы объекта на фото. (знаю, много хочу:cry:). Допустим фотографируешь девушки и чтобы автоматически выделяло грудь) Или голову) Нужно собственно выделение круглых объектов.
Программирование Android Logcat на устройстве Тестирую приложение, парсит сайт. На эмуляторе все проходит хорошо, а на телефоне иногда крашится в момент соединения к сайту. Как логировать ошибки, чтоб сохранялись в файл для последующего просмотра? Возможно ли это? http://www.cyberforum.ru/android-dev/thread1214126.html
Контролы поверх Google-карты Программирование Android
Всё активити занято гугл картой. Подскажите плиз как разместить контролы(button или imagebutton) поверх карты
Программирование Android Приложения с картами
Нащёл примерчик :https://www.youtube.com/watch?v=obkXKuXsnPQ Сделал всё как там, работает. тоесть место ля карты есть нопки есть стрелки для перемешения, но карты не видною может начальные коардиныты задат ь надо, или ещё что?? запускаю на Gallaxy S III
Программирование Android Аномалия с некоторыми моделями Samsung http://www.cyberforum.ru/android-dev/thread1213807.html
По какой-то непонятной причине в некоторых моделях самсунга при вызове Активити2 из Активити1 в Активити1 вызывается метод onDestroy() даже без использования метода finish(), т.е. вызывается onDestroy() при любых обстоятельствах, соответственно, при возвращении назад в Активити1 вызывается метод onCreate() вместо onResume(). Вот у товарища тот же вопрос...
Программирование Android Куда лучше записыать временные данные (массив данных) получаю много отчетов, например получил один отчет и потом ушел на вкладку отчет2 \ (при этом если массив данных первого отчета сохранять в глобальную переменную думаю памяти много сжирать будет ?) \ это все нужно чтобы если пользователь обратно вернулся в вкладку отчет1 не скачивать с инета опять тотже отчет... SQL lite чтоли использовать ? или глоб. переменные память много сжирать не будут... подробнее

Показать сообщение отдельно
YuraAAA
1571 / 1313 / 270
Регистрация: 25.10.2009
Сообщений: 3,433
Записей в блоге: 2
22.06.2014, 16:36
Так это вообще easy. Добавим ещё generic type.

Интерфейс это такая структура, которая описывает лишь правила поведения. Она описывает что нужно делать, но не КАК это делать.

Java
1
2
3
4
5
6
7
8
9
10
11
public interface IWorkerCallback<V> {
 
    void onBegin(); //Асинхронная операция началась
 
    void onSuccess(V data); //Получили результат
 
    void onFailure(Throwable t); //Получили ошибку
 
    void onEnd(); //Операция закончилась
 
}
2. Опишем абстрактную универсальную асинк таску


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 abstract class AbstractAsyncWorker<V> extends AsyncTask<Void, Void, V> {
    private IWorkerCallback<V> callback;
    private Throwable t;
 
    //В конструктор передаём интерфейс
    protected AbstractAsyncWorker(IWorkerCallback<V> callback) {
        this.callback = callback;
    }
 
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        if (callback != null) {
            callback.onBegin(); //Сообщаем через интерфейс о начале
        }
    }
 
    protected abstract V doAction() throws Exception; //Этот метод будем переопределять
 
    @Override
    protected V doInBackground(Void... params) {
        try {
            return doAction(); //В параллельном потоке вызываем абстрактный метод.
        } catch (Exception e) {
            t = e;
            return null;
        }
    }
 
    @Override
    protected void onPostExecute(V v) {
        super.onPostExecute(v);
        if (callback != null) {
            callback.onEnd(); //Сообщаем об окончании
        }
        generateCallback(v);
    }
 
    private void generateCallback(V data) { //Генерируем ответ
        if (callback == null) return;
        if (data != null) { //Есть данные - всё хорошо
            callback.onSuccess(data);
        } else if (t != null) {
            callback.onFailure(t); //Есть ошибка - вызываем onFailure
        } else { //А такая ситуация вообще не должна появляться)
            callback.onFailure(new NullPointerException("Result is empty but error empty too"));
        }
    }
}

3. Вызов.
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
public class Test implements IWorkerCallback<Integer> {
 
    private void doSomethingAsyncOperaion() {
        new AbstractAsyncWorker<Integer>(this) {
            @Override
            protected Integer doAction() throws Exception {
                Thread.currentThread().wait(1000);
                return 1;
            }
        }.execute();
    }
 
    @Override
    public void onBegin() {
        Log.d("Async", "Begin");
    }
 
    @Override
    public void onSuccess(Integer data) {
        Log.d("Async", "Success:" + data);
    }
 
    @Override
    public void onFailure(Throwable t) {
        Log.d("Async", "Failure", t);
    }
 
    @Override
    public void onEnd() {
        Log.d("Async", "End");
    }
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru