2014-09-30 250 views
-1

我坐在一个代码上的5小时,其中AyncTask运行不正常。我刚刚创建了另一个简单的Activity(因为在最后一个onPostExecute()不起作用),现在这个简单的Activity也不会启动AsyncTask。任何人都可以看到我做错了什么?AsyncTask甚至没有启动

public class ServerStatus extends Activity { 
Context context;  
private ProgressDialog pd; 
int a; 
TextView test; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.server_status); 
     context=this; 
     test=(TextView) findViewById(R.id.welcomemessage); 
     new Download().execute(); 


    } 

    public class Download extends AsyncTask<Void, Void, Void>{ 

     protected Void onPreExecute(Void... arg0) { 
      pd = new ProgressDialog(context); 
      pd.setTitle("Processing..."); 
      pd.setMessage("Please wait."); 
      pd.setCancelable(false); 
      pd.setIndeterminate(true); 
      pd.show(); 
      return null; 
     } 


     @Override 
     protected Void doInBackground(Void... arg0) { 
      try { 
       Thread.sleep(2000); 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      a++; 
      return null; 
     } 


     protected Void onPostExecute(Void... arg0) { 
      if (pd!=null) 
       pd.dismiss(); 
      test.setText(a); 
      return null; 
     } 

    } 

} 

另外,是否NavigationDrawer阻止UI线程?因为我实施它时甚至不能更新TextView

+0

您应该在onProgressUpdate()内做UI组件修改。导航抽屉不会阻塞UI线程。当你尝试并运行它时会发生什么? – 2014-09-30 20:10:09

+0

这里是我的[回答类似的问题] [1] [1]:http://stackoverflow.com/questions/25752210/cant-see-progressdialog-while-asynctask-run-in-background/25752553#25752553 – user3144836 2014-09-30 20:14:37

+0

那么,我是从onPostExecute()更新UI线程,所以也许有我的问题(它没有更新任何东西,甚至没有做任何事情,就像它没有被调用)。那么明天再试试看吧。感谢您的建议。 – Darknez 2014-09-30 20:15:03

回答

2

的方法是不正确的。你应该添加@Override注释给他们,所以它会在你做错了的时候大吼大叫。

onPreExecute()不采取任何params所以它应该是

@Override 
protected Void onPreExecute() { 

也onPostExecute()的`帕拉姆类型更改为

@Override 
protected Void onPostExecute(Void arg0) { 

为删除 “...” See Varargs说明。

Docs

Post explaining AsyncTask and getting values

类声明的PARAMS是doInBackground()onProgressUpdate()onPostExecute()

至于NavDrawer,我不知道你用的是一样的东西问题。

+0

似乎工作,但可能我做错了,因为在@Override添加到onPostExecute()后它说:“方法onPostExecute(Void ...)类型ServerStatus.download必须覆盖或实现一个超类型方法“。可能我弄砸了一些有争议的事情,但如果你或其他人会纠正我,我会很感激。 5小时后,我没有想直... – Darknez 2014-09-30 20:12:12

+0

啊,是的,分心。查看我的更新。 – codeMagic 2014-09-30 20:14:38

+0

谢谢。现在它正在工作。该死的我是noob ... – Darknez 2014-09-30 20:17:43

-1

您需要onPreExecute

pd = new ProgressDialog(context); 

更改代码以

pd = new ProgressDialog(getActivity()); 
+0

方法getActivity()是未定义的类型ServerStatus.download – Darknez 2014-09-30 20:04:02

+0

对不起,我以为你正在使用片段,我的不好 – anetha 2014-09-30 20:06:24

相关问题