我在一个代码上坐了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
。
答案 0 :(得分:2)
方法不正确。您应该向它们添加@Override
注释,以便在做错时会对您大喊大叫。
onPreExecute()
不接受任何params
所以它应该是
@Override
protected Void onPreExecute() {
还将`onPostExecute()的参数类型更改为
@Override
protected Void onPostExecute(Void arg0) {
删除&#34; ...&#34; See Varargs获得解释。
Post explaining AsyncTask and getting values
类声明中的这些参数适用于doInBackground()
,onProgressUpdate()
和onPostExecute()
就NavDrawer
而言,我不确定您遇到了什么问题。
答案 1 :(得分:-1)
您需要在onPreExecute中更改代码
pd = new ProgressDialog(context);
到
pd = new ProgressDialog(getActivity());