Android 异步任务甚至没有启动
我用Android 异步任务甚至没有启动,android,android-asynctask,navigation-drawer,progressdialog,Android,Android Asynctask,Navigation Drawer,Progressdialog,我用AyncTask在一个代码上坐了5个小时,但运行不正常。我刚刚创建了另一个简单的活动(因为上一个onPostExecute()没有工作),现在这个简单的活动也没有启动异步任务。有人能看出我做错了什么吗 public class ServerStatus extends Activity { Context context; private ProgressDialog pd; int a; TextView test; @Override protecte
AyncTask
在一个代码上坐了5个小时,但运行不正常。我刚刚创建了另一个简单的活动
(因为上一个onPostExecute()
没有工作),现在这个简单的活动
也没有启动异步任务
。有人能看出我做错了什么吗
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;
}
}
}
公共类服务器状态扩展活动{
语境;
私营部门;
INTA;
文本视图测试;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onCreate(savedInstanceState);
setContentView(R.layout.server_状态);
上下文=这个;
test=(TextView)findViewById(R.id.welcomemessage);
新下载().execute();
}
公共类下载扩展异步任务{
受保护的Void onPreExecute(Void…arg0){
pd=新进度对话框(上下文);
pd.setTitle(“处理…”);
设置消息(“请稍候”);
pd.可设置可取消(假);
pd.SetUndeterminate(真);
pd.show();
返回null;
}
@凌驾
受保护的Void doInBackground(Void…arg0){
试一试{
《睡眠》(2000年);
}捕捉(中断异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
a++;
返回null;
}
受保护的Void onPostExecute(Void…arg0){
如果(pd!=null)
pd.解散();
test.setText(a);
返回null;
}
}
}
另外,
NavigationDrawer
是否阻止UI线程?因为我在实现时甚至无法更新TextView
。您需要在onPreExecute中更改代码
pd = new ProgressDialog(context);
到
这些方法不正确。你应该给它们添加
@Override
注释,这样它会在做错的时候对你大喊大叫
onPreExecute()
不接受任何params
,因此它应该是
@Override
protected Void onPreExecute() {
还要将'onPostExecute()的参数类型更改为
删除“…”以获取解释
类声明中的那些参数用于doInBackground()
,onProgressUpdate()
,和onPostExecute()
至于
NavDrawer
,我不确定您有什么问题。类型ServerStatus的getActivity()方法未定义。下载抱歉,我以为您在处理片段,我的朋友,您应该在onProgressUpdate()中修改UI组件。导航抽屉不会阻止UI线程。当您尝试运行它时会发生什么情况?这是我的[对类似问题的回答][1][1]:嗯,我是从onPostExecute()更新UI线程的,所以可能是我的问题(它没有更新任何内容,甚至做任何类似于没有调用它的事情)。明天就试试吧。谢谢你的建议。你真的应该使用@Override注释。您的编译器会立即告诉您这个问题。似乎正在工作,但可能是我做错了什么,因为在将@Override添加到onPostExecute()后,它会说“ServerStatus.download类型的onPostExecute(Void…)方法必须重写或实现超类型方法”。也许我在争论中弄错了什么,但如果你或其他人能纠正我,我将不胜感激。5个小时后,我的思维不正常。。。
@Override
protected Void onPreExecute() {
@Override
protected Void onPostExecute(Void arg0) {