Форум программистов, компьютерный форум, киберфорум
Наши страницы
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
 
Sen1k
0 / 0 / 0
Регистрация: 19.09.2013
Сообщений: 17
1

AsyncTask

04.03.2015, 15:12. Просмотров 326. Ответов 2
Метки нет (Все метки)

Здавствуйте! У меня такой вопрос как вытащить переменную из AsyncTask в основной поток.

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
 public class MainActivity extends Activity {
 
  MyTask mt;
  TextView tvInfo;
  String qwerty;
 
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
 
    tvInfo = (TextView) findViewById(R.id.tvInfo);
  }
 
  public void onclick(View v) {
    mt = new MyTask();
    mt.execute();
    
    tvInfo.setText(qwerty);
 
  }
 
  class MyTask extends AsyncTask<Void, Void, String> {
 
    @Override
    protected String doInBackground(qwerty) {
 
    qwerty = "123";
 
    return qwerty;
    }
 
    @Override
    protected void onPostExecute(Void result) {
      super.onPostExecute(result);
    }
  }
}

tvInfo.setText(qwerty); - эту строку надо сделать не в onPostExecute, а в основном классе. Если это делается как то по другому, подскажите пожалуйста.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.03.2015, 15:12
Ответы с готовыми решениями:

Ожидание завершения работы AsyncTask
Здравствуйте! Есть функция. В ней запускаю работу класса AsyncTask. В этой же функции дожидаюсь...

AsyncTask
Использую AsyncTasc class MyT extends AsyncTask&lt;Void, Void, Void&gt; { @Override...

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

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

AsyncTask
Привет. Знаю, что в AsyncTask doInBackground() обращатся к компонентам UI нельзя. Когда я пытаюсь...

2
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
04.03.2015, 15:31 2
Sen1k, правильно делать через callback:

1. Интерфейс

Java
1
2
3
4
5
public interface IAsyncListener {
 
    void onResult(String result);
 
}
2. Модифицируем таску

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class MyTask extends AsyncTask<Void, Void, String> {
 
        private IAsyncListener listener;
 
        public MyTask(IAsyncListener listener) {
            this.listener = listener;
        }
 
        @Override
        protected String doInBackground(Void... params) {
            return "qwerty";
        }
 
        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            if (listener != null) {
                listener.onResult(s);
            }
        }
    }
3. Тогда вызов будет следующим:

Java
1
2
3
4
5
6
7
 MyTask mt = new MyTask(new IAsyncListener() {
                @Override
                public void onResult(String result) {
                          tvInfo.setText(result);              
                }
            });
            mt.execute();
1
Sen1k
0 / 0 / 0
Регистрация: 19.09.2013
Сообщений: 17
04.03.2015, 15:46  [ТС] 3
Спасибо, домой приду попробую
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.03.2015, 15:46

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

AsyncTask ObjectAnimator
Добрый вечер. Прошу помочь мне. Пытаюсь написать карточную игру. В игре игрок выбирает две карты,...

MainActivity AsyncTask
Добрый вечер. Ребята тут небольшая проблема. Мне нужно Заполнить NavigatorDrawer (из базы)....


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

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

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