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

Ожидание завершения AsyncTask - Android

Восстановить пароль Регистрация
 
NEvOl
13 / 12 / 0
Регистрация: 13.08.2012
Сообщений: 643
28.02.2015, 18:59     Ожидание завершения AsyncTask #1
Имеется класс "расширяющий" AsyncTask. Как я понимаю при создании объекта этого класса создается новый поток который выполняется параллельно с основным. Задача такая. Необходимо дождаться когда поток завершиться и выполнить сразу некоторые действия. что-то типа такого:
Java
1
2
3
while(AsyncTask.Status.RUNNING == load.getStatus()){}//load - объект класс расширяющий AsyncTask
        main_view_marketButton.setOnClickListener(this);
        main_view_callButton.setOnClickListener(this);
Но это зацикливается, что-то я не понимаю что не так, возможно нужно делать некоторую задержку в цикле... Подскажите пожалуйста что не так ?
Либо может это:
Java
1
2
main_view_marketButton.setOnClickListener(this);
        main_view_callButton.setOnClickListener(this);
Можно выполнить в параллельном потоке, но вроде как я читал что нельзя взаимодействовать с UI.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.02.2015, 18:59     Ожидание завершения AsyncTask
Посмотрите здесь:

Android AsyncTask+CheckBox
Android AsyncTask и Jsoup
Android Ожидание завершения пула потоков
Android AsyncTask
Android AsyncTask и get()
AsyncTask Android
Android Дождаться завершения работы AsyncTask и выполнять код дальше
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
shulyakyarik
10 / 10 / 3
Регистрация: 28.03.2014
Сообщений: 156
28.02.2015, 19:04     Ожидание завершения AsyncTask #2
В отдельном потоке выполняется только doInBackground. В методах onPreExecute(выполняется до) и onPostExecute(выполняется после) вы можете взаимодействовать с UI
NEvOl
13 / 12 / 0
Регистрация: 13.08.2012
Сообщений: 643
28.02.2015, 19:09  [ТС]     Ожидание завершения AsyncTask #3
shulyakyarik, как мне тогда правильно указать setOnClickListener для main_view_marketButton в onPostExecute, если у меня MainActivity реализует View.OnClickListener ?
Пробовал что-то типа такого:
Java
1
2
main_view_marketButton.setOnClickListener(MainActivity.class);
            main_view_callButton.setOnClickListener(MainActivity.class);
не работает
shulyakyarik
10 / 10 / 3
Регистрация: 28.03.2014
Сообщений: 156
28.02.2015, 19:14     Ожидание завершения AsyncTask #4
Listener можно повесить так
Java
1
2
3
4
5
6
main_view_marketButton.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        
                    }
                });
NEvOl
13 / 12 / 0
Регистрация: 13.08.2012
Сообщений: 643
28.02.2015, 20:21  [ТС]     Ожидание завершения AsyncTask #5
а если я хочу один Listener на несколько разных событий событий ?
shulyakyarik
10 / 10 / 3
Регистрация: 28.03.2014
Сообщений: 156
28.02.2015, 21:45     Ожидание завершения AsyncTask #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Если вы имели ввиду поставить один и тот же Listener на разные кнопки
Java
1
2
3
4
5
6
7
class xxx implements View.OnClickListener{
        @Override
        public void onClick(View v) {
            
        }
    }
button.setOnClickListener(xxx.class)
Или можете как вы предлагали, только попробуйте вместо MainActivity.class написать this, или MainActivity.this если listener указывается во вложенном классе
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.03.2015, 10:18     Ожидание завершения AsyncTask
Еще ссылки по теме:

AsyncTask Android
Android AsyncTask тормозит
Android Не работает AsyncTask
MainActivity AsyncTask Android
Android AsyncTask не выполняет код после завершения

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

Или воспользуйтесь поиском по форуму:
NEvOl
13 / 12 / 0
Регистрация: 13.08.2012
Сообщений: 643
01.03.2015, 10:18  [ТС]     Ожидание завершения AsyncTask #7
если указывать MainActivity.this (т.к. listener указывается во вложенном классе)
то:
java.lang.NullPointerException
а просто this не работает

Добавлено через 9 минут
вот весь код:
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
public class MainActivity extends Activity implements View.OnClickListener {
 
    ImageView _preapre_view_imageView;
 
    Button main_view_marketButton;
    Button main_view_callButton;
    boolean reg_file_is_exists = false;
    AlertDialog reg_dialog;
    LinearLayout RegView;
 
    EditText reg_view_name;
    EditText reg_view_phone;
    Switch reg_view_sex;
    Button reg_view_send;
    ProccessCustomer pc;
 
    private String company_number = "tel:+7123456789";
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.prepare_view);
 
        _preapre_view_imageView = (ImageView)findViewById(R.id.prepare_view_imageView);
        String pathToImg = this.getFilesDir().getParent()+"/files/images";
        File folder = new File(pathToImg);
 
        if (folder.exists()) {
            String path = pathToImg + "/main_image.bmp";
            Bitmap bmp = BitmapFactory.decodeFile(path);
            _preapre_view_imageView.setImageBitmap(bmp);
        }
 
        GeneralData.context = this;
 
        Timer load = null;
 
            load = new Timer();
            load.execute();
    }
 
    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.main_view_marketButton:
                Intent category_market_view = new Intent(GeneralData.context, category_market_activity.class);
                startActivity(category_market_view);
                break;
            case R.id.main_view_callButton:
                Intent callIntent = new Intent(Intent.ACTION_DIAL, Uri.parse(company_number));
                startActivity(callIntent);
                break;
            case R.id.reg_view_send:
                if (reg_view_name.getText().toString() != "" &&
                        reg_view_phone.getText().toString() != "")
                    pc = new ProccessCustomer(reg_view_name.getText().toString(),
                            reg_view_phone.getText().toString(),
                            (reg_view_sex.isChecked())?"M":"W");
                break;
 
        }
    }
 
    protected Dialog prepareRegDialog()
    {
        AlertDialog.Builder builder_reg_dialog = new AlertDialog.Builder(this);
        builder_reg_dialog.setTitle("Registration window");
        RegView = (LinearLayout) getLayoutInflater()
                .inflate(R.layout.reg_dialog, null);
        builder_reg_dialog.setView(RegView);
 
        reg_view_name = (EditText) RegView.findViewById(R.id.reg_view_name);
        reg_view_phone = (EditText) RegView.findViewById(R.id.reg_view_phone);
        reg_view_sex = (Switch) RegView.findViewById(R.id.reg_view_sex);
        reg_view_send = (Button) RegView.findViewById(R.id.reg_view_send);
 
        reg_view_send.setOnClickListener(this);
        return builder_reg_dialog.create();
    }
 
    class Timer extends AsyncTask<String, String, String> {
 
        long _millis;
 
        protected void onPreExecute() {
            _millis = System.currentTimeMillis();
        }
 
        protected String doInBackground(String[] params) {
            Content.LoadData(GeneralData.context.getFilesDir().getParent()+"/files");
            return null;
        }
 
        protected void onPostExecute(String file_url) {
            main_view_marketButton = (Button)findViewById(R.id.main_view_marketButton);
            main_view_callButton = (Button)findViewById(R.id.main_view_callButton);
            /*main_view_marketButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent category_market_view = new Intent(GeneralData.context, category_market_activity.class);
                    startActivity(category_market_view);
                }
            });
            main_view_callButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent callIntent = new Intent(Intent.ACTION_DIAL, Uri.parse(company_number));
                    startActivity(callIntent);
                }
            });*/
            setContentView(R.layout.main_view);
        }
    }
}
если раскомментить это:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
main_view_marketButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent category_market_view = new Intent(GeneralData.context, category_market_activity.class);
                    startActivity(category_market_view);
                }
            });
            main_view_callButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent callIntent = new Intent(Intent.ACTION_DIAL, Uri.parse(company_number));
                    startActivity(callIntent);
                }
            });
то вылетает с ошибкой java.lang.NullPointerException

Добавлено через 14 минут
не находятся почему-то main_view_callButton и main_view_marketButton

Добавлено через 6 минут
нужно вызывать setContentView(R.layout.main_view); перед поиском объектов, разобрался)
Yandex
Объявления
01.03.2015, 10:18     Ожидание завершения AsyncTask
Ответ Создать тему
Опции темы

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