Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
PYPS
51 / 50 / 18
Регистрация: 12.07.2011
Сообщений: 546
Завершенные тесты: 3
#1

AsyncTask

01.04.2014, 14:53. Просмотров 1218. Ответов 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
}
Но как туда передать что ошибка именно из за того что сервер не доступен ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.04.2014, 14:53
Ответы с готовыми решениями:

AsyncTask
Привет. Знаю, что в AsyncTask doInBackground() обращатся к компонентам UI...

AsyncTask и get()
Создаю асинхронный процесс, где в onPreExecute() запускаю анимированный...

AsyncTask
Здравствуйте, при использовании двух одинаковых методов получается разный...

AsyncTask и Jsoup
Не работает вот такой код: package com.example.projecta; import...

Работа с AsyncTask
Попробовал использовать AsyncTask и возник вопрос. У меня есть несколько ф-й,...

13
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
01.04.2014, 15:20 #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
        }
    }
1
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
01.04.2014, 16:44 #3
Еще можно использовать обычный Tread и выкидывать сообщение об ошибке в методе runOnUiThread
0
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
01.04.2014, 17:25 #4
KillAndEat, Thread я бы порекомендовал использовать на платформах ниже API 11. Так как до 11 апи может исполнятся только 1 AsyncTask одновременно.
0
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
01.04.2014, 17:34 #5
YuraAAA, мне просто таски никогда не нравились) по этому по возможности нити использую)
0
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
01.04.2014, 17:39 #6
KillAndEat, а Loader пробовал? http://developer.android.com/guide/components/loaders.html
0
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
01.04.2014, 17:45 #7
YuraAAA, Ага. Интересная штука, но на мой взгляд слишком много кода для описания, так что для мелких задач не очень пригодна.
0
PYPS
51 / 50 / 18
Регистрация: 12.07.2011
Сообщений: 546
Завершенные тесты: 3
08.04.2014, 13:39  [ТС] #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 минуты
Подскажите что не так?
0
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
08.04.2014, 14:59 #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....
1
PYPS
51 / 50 / 18
Регистрация: 12.07.2011
Сообщений: 546
Завершенные тесты: 3
14.04.2014, 14:01  [ТС] #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);
////Здесь как я понимаю нужно  как то вернуть...
 
}
0
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
14.04.2014, 14:13 #11
PYPS, Создайте какой нибудь метод в активити который будет принимать результат выполнения таска, а в своем теле будет присваивать результат какой либо внутренней активити переменной. И вызывайте его в onPostExecute.

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

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


Можно небольшой пример? мне так еще сложно понять.
0
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
14.04.2014, 14:48 #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 минуту
В запросе на сервер должен быть тайм аут подключения. Вот если он появился то и выводите тост от туда
1
PYPS
51 / 50 / 18
Регистрация: 12.07.2011
Сообщений: 546
Завершенные тесты: 3
14.04.2014, 14:48  [ТС] #14
Понял щас по пробую?
0
14.04.2014, 14:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.04.2014, 14:48

AsyncTask и SQLite
Здравствуйте! У меня в приложении есть БД SQLite, при нажатие на кнопку...

Отмена AsyncTask
Привет. Есть такой код: @Override protected Void doInBackground(Void......

AsyncTask тормозит
Подскажите пожалуйста, делалю загрузку данных с сервера через asyncTask и...


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

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

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