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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
PYPS
51 / 50 / 7
Регистрация: 12.07.2011
Сообщений: 542
Завершенные тесты: 3
#1

AsyncTask - Android

01.04.2014, 14:53. Просмотров 1111. Ответов 13
Метки нет (Все метки)

Использую AsyncTasc

Java
1
2
3
4
5
6
7
8
9
class MyT extends AsyncTask<Void, Void, Void>
    {
 
        @Override
        protected Void doInBackground(Void... params) {
            Zapros_na_server();  
            return null;
        }
    }
Java
1
 Zapros_na_server();// выполняются GET запросы
Если сервер не доступен как вывести сообщение пользователю из AsyncTasc?

Я понимаю что нужно Toast выводить в
Java
1
2
3
protected void onPostExecute(Void result)
{///Toast
}
Но как туда передать что ошибка именно из за того что сервер не доступен ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.04.2014, 14:53     AsyncTask
Посмотрите здесь:

Android AsyncTask+CheckBox
Завершение потока AsyncTask Android
Android Exception в AsyncTask
Android Работа с AsyncTask
Запуск нескольких AsyncTask Android
AsyncTask Android
Android Отмена AsyncTask
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
YuraAAA
1565 / 1307 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
01.04.2014, 15:20     AsyncTask #2
PYPS, как вариант:

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
class MyT extends AsyncTask<Void, Void, Void> {
        
        private Throwable throwable;
 
        @Override
        protected Void doInBackground(Void... voids) {
            try {
                doRequest();
            } catch (IOException e) {
                throwable = e;
            }
            return null;
        }
 
        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
            if (throwable != null) {
                if (throwable instanceof ConnectTimeoutException) {
                    Toast.makeText(............)
                }
            }
        }
 
        private void doRequest() throws IOException{
            //TODO something request
        }
    }
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
01.04.2014, 16:44     AsyncTask #3
Еще можно использовать обычный Tread и выкидывать сообщение об ошибке в методе runOnUiThread
YuraAAA
1565 / 1307 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
01.04.2014, 17:25     AsyncTask #4
KillAndEat, Thread я бы порекомендовал использовать на платформах ниже API 11. Так как до 11 апи может исполнятся только 1 AsyncTask одновременно.
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
01.04.2014, 17:34     AsyncTask #5
YuraAAA, мне просто таски никогда не нравились) по этому по возможности нити использую)
YuraAAA
1565 / 1307 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
01.04.2014, 17:39     AsyncTask #6
KillAndEat, а Loader пробовал? http://developer.android.com/guide/c...s/loaders.html
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
01.04.2014, 17:45     AsyncTask #7
YuraAAA, Ага. Интересная штука, но на мой взгляд слишком много кода для описания, так что для мелких задач не очень пригодна.
PYPS
51 / 50 / 7
Регистрация: 12.07.2011
Сообщений: 542
Завершенные тесты: 3
08.04.2014, 13:39  [ТС]     AsyncTask #8
Делаю так.


Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
MainActivity Mn;
 
 
 
protected Void doInBackground(String ... params) 
{
///Код
return null;
}
 
@Override
    protected void onPostExecute(Void aVoid) 
{
     super.onPostExecute(aVoid);
    Mn = new MainActivity();
    Toast.makeText(Mn, "Finished!", Toast.LENGTH_LONG).show();
 
}
Получаю ошибку . NullPointerException

Добавлено через 33 минуты
Подскажите что не так?
YuraAAA
1565 / 1307 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
08.04.2014, 14:59     AsyncTask #9
Цитата Сообщение от PYPS Посмотреть сообщение
Mn = new MainActivity();
??
Активити не создаются явно через конструктор.

Передавайте как аргумент в конструктор:

Java
1
2
3
4
5
6
7
8
9
class MyATask extends AsyncTask<Void,Void,Void> {
Context context;
public MyATask(Context context) {
this.context = context;
}
 
......
 
Toast.makeText(context....
PYPS
51 / 50 / 7
Регистрация: 12.07.2011
Сообщений: 542
Завершенные тесты: 3
14.04.2014, 14:01  [ТС]     AsyncTask #10
Подскажите еще как вернуть результат выполнения в активити из которой AsyncTasc был запущен ?
Вот делаю так.
Java
1
2
3
4
5
6
7
8
9
10
//Activity.
 
 
MyTasc AT;
String Result;
 
 
AT = new MyTasc();
AT.execute("Вася","Петя");
Result=Mt.get();

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//class AsyncTasc
class ATasc extends AsyncTask<String, Void, String>
{
protected String doInBackground(String ... params) 
{
return "HELLO WORLD"
}
 
protected void onPostExecute(String result) 
{
        super.onPostExecute(result);
////Здесь как я понимаю нужно  как то вернуть...
 
}
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
14.04.2014, 14:13     AsyncTask #11
PYPS, Создайте какой нибудь метод в активити который будет принимать результат выполнения таска, а в своем теле будет присваивать результат какой либо внутренней активити переменной. И вызывайте его в onPostExecute.

А вообще для возвращения результата Callable есть.

Добавлено через 35 секунд
Можно еще для этого интерфейс свой организовать, но это громоздко на мой взгляд)
PYPS
51 / 50 / 7
Регистрация: 12.07.2011
Сообщений: 542
Завершенные тесты: 3
14.04.2014, 14:19  [ТС]     AsyncTask #12
а разве
Java
1
Result=AT.get();
не запрашивает результат из Asynctasc?


Можно небольшой пример? мне так еще сложно понять.
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
14.04.2014, 14:48     AsyncTask #13
запрашивает, но если таску нечего возвращать, то он повесит вам прогу пока что-нибудь не появится или не вылетит исключение. Так что его желательно использовать во варианте с тайм аутом, и в блоке try catch.

Добавлено через 3 минуты
в активити

Java
1
2
3
public void result(Result result) {
        this.result = result
    }
В onPostExecute

Java
1
2
3
4
5
6
runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        result(result);
                    }
                });
Добавлено через 18 секунд
как нибудь так

Добавлено через 1 минуту
В запросе на сервер должен быть тайм аут подключения. Вот если он появился то и выводите тост от туда
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.04.2014, 14:48     AsyncTask
Еще ссылки по теме:

Android Ожидание завершения AsyncTask
AsyncTask и SQLite Android
ArrayList не заполняется в AsyncTask Android
Android AsyncTask тормозит
Android Не работает AsyncTask

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

Или воспользуйтесь поиском по форуму:
PYPS
51 / 50 / 7
Регистрация: 12.07.2011
Сообщений: 542
Завершенные тесты: 3
14.04.2014, 14:48  [ТС]     AsyncTask #14
Понял щас по пробую?
Yandex
Объявления
14.04.2014, 14:48     AsyncTask
Ответ Создать тему
Опции темы

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