AsyncTask甚至没有启动

时间:2014-09-30 19:58:01

标签: android android-asynctask navigation-drawer progressdialog

我在一个代码上坐了5个小时,AyncTask运行不正常。我刚刚创建了另一个简单的Activity(因为在最后一个onPostExecute()无效),现在这个简单的Activity也没有启动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

2 个答案:

答案 0 :(得分:2)

方法不正确。您应该向它们添加@Override注释,以便在做错时会对您大喊大叫。

onPreExecute()不接受任何params所以它应该是

@Override
protected Void onPreExecute() {

还将`onPostExecute()的参数类型更改为

@Override
 protected Void onPostExecute(Void arg0) {

删除&#34; ...&#34; See Varargs获得解释。

Docs

Post explaining AsyncTask and getting values

类声明中的这些参数适用于doInBackground()onProgressUpdate()onPostExecute()

NavDrawer而言,我不确定您遇到了什么问题。

答案 1 :(得分:-1)

您需要在onPreExecute中更改代码

pd = new ProgressDialog(context);

pd = new ProgressDialog(getActivity());