2011-11-18 79 views
0


下面是應該執行某些操作然後調用onPostExecute事件的代碼的一部分。
出於某種原因,它不會調用它,在eclipse我可以看到,該方法被標記爲黃色(不使用方法)...
我無法理解爲什麼它的這種方式...
你知道爲什麼嗎?
謝謝!
PS:我看着一些職位在這裏並沒有發現我的解決方案...AsyncTast not calling onPostExecute

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); 


     } 
    }); 

回答

6

您不是正確覆蓋onPostExecute()。它需要一個參數(您從doInBackground()返回的對象)。但是你可以使用不帶參數的簽名覆蓋/創建方法。這意味着該框架將調用默認的實現,而不是您自己的實現。它什麼都不做。

因此,在這種情況下,改變

protected void onPostExecute() { 

protected void onPostExecute(String[] result) { 

。 我還建議在該方法中添加一個@Override註釋,在這種情況下,eclipse或類似的工具應該首先指出這一點。

0

得到的AsyncTask出了新OnClickListener的()。直接在活動中將其定義爲私人課程。

+0

當這個類是私人的,它說:非法修飾符爲本地類DonloadFilesTask;只允許抽象或最終 –