AsyncTast没有调用onPostExecute

时间:2011-11-18 13:44:12

标签: java android onclick android-asynctask


这是应该执行某些操作的代码的一部分,然后调用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 个答案:

答案 0 :(得分:6)

您未正确覆盖onPostExecute()。它需要一个参数(从doInBackground()返回的对象)。但是您使用不带参数的签名覆盖/创建方法。这意味着框架调用默认实现而不是您自己的实现。什么都不做。

所以改变

protected void onPostExecute() {

protected void onPostExecute(String[] result) {

在这种情况下。 我还建议在该方法中添加@Override注释,在这种情况下,eclipse或类似的工具应该首先指出这一点。

答案 1 :(得分:0)

从新的OnClickListener()中获取AsyncTask。在Activity中直接将其定义为私有类。