AsyncTast没有调用onPostExecute

And*_*ker 0 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);


        }
    });
Run Code Online (Sandbox Code Playgroud)

小智 6

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

所以改变

protected void onPostExecute() {
Run Code Online (Sandbox Code Playgroud)

protected void onPostExecute(String[] result) {
Run Code Online (Sandbox Code Playgroud)

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