AsyncTast не вызывает onPostExecute - PullRequest
0 голосов
/ 18 ноября 2011


Вот часть кода, которая должна что-то сделать, а затем вызвать событие onPostExecute.
Почему-то это не вызывается, и в Eclipse я вижу, что метод помечен желтым (неиспользуемый метод) ...
Я не могу понять, почему это так ...
Ты знаешь почему?
Спасибо!
PS: я просмотрел несколько постов здесь и не нашел своего решения ...

    final ImageButton sync = (ImageButton) findViewById(R.id.syncChanges);
    sync.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            sync.setImageResource(R.drawable.none);
            sync.setBackgroundResource(R.drawable.animation);
            final AnimationDrawable frameAnimation =  (AnimationDrawable) sync.getBackground();
            frameAnimation.start();
             class DownloadFilesTask extends AsyncTask<String, Void, String[]> {
                 protected String[] doInBackground(String...strings) {
                    try {
                        OptionScraper.run(strings[0], Integer.parseInt(strings[1]));
                    } catch (NumberFormatException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (ClientProtocolException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    return OptionScraper.GetChanges();
                 }
                    protected void onPostExecute() {
                    InitChangesToText();
                    frameAnimation.stop();
                    sync.setImageResource(R.drawable.sync);
                 }
             }
             new DownloadFilesTask().execute(classLetter,classNum);


        }
    });

Ответы [ 2 ]

6 голосов
/ 18 ноября 2011

Вы не переопределяете onPostExecute() правильно.Требуется один аргумент (объект, который вы возвращаете из doInBackground()) .Но вы переопределяете / создаете метод с подписью, которая не принимает аргументов.Это означает, что фреймворк вызывает реализацию по умолчанию, а не вашу собственную.Который вообще ничего не делает.

Так что измените

protected void onPostExecute() {

на

protected void onPostExecute(String[] result) {

в этом случае.Я также рекомендую добавить аннотацию @Override к этому методу, в этом случае затмение или аналогичный инструмент должны были указать на это в первую очередь.

0 голосов
/ 18 ноября 2011

получить AsyncTask из нового OnClickListener (). Определите его непосредственно как частный класс в вашей деятельности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...