当我开始活动时,我将执行此操作
webservice.updateallCatNews();
此功能从在线数据库检索数据到本地数据库。完成时间不是恒定的,取决于网速。
我想知道动作何时完成。有时15,但有时10或20.我需要在完成后开始活动。
任何函数都可以检测到除了asynctask之外的操作已完成?
private class UpdatingNews extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
webservice.updateallCatNews();
return null;
}
@Override
protected void onPostExecute(String result) {
}
}
活动类
private UpdatingNews update;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_formnewuser);
webservice = new Database_WebService(this);
update = new UpdatingNews();
if (isOnline() == true) {
update.execute("...");
}
}
UpdateallCatNews类
public void updateallCatNews() {
try {
List<List_CategoryNews> newsCat = dbhelper.getAllNewsCategories();
for (List_CategoryNews nwCat : newsCat) {
int CatNewsID = nwCat.getCatID();
if (CatNewsID != 0) {
List_CategoryNews deleteNewsCat = new List_CategoryNews(
CatNewsID);
dbhelper.DeleteNewsCat(deleteNewsCat);
}
}
GetNewsCategory();
} catch (Exception ex) {
AlertDialog.Builder b = new AlertDialog.Builder(mContext);
b.setMessage(ex.toString());
b.show();
}
}
在此课程中,没有其他错误,因为其他活动可以执行。
这if()似乎没有运行
if(update.getStatus().equals(AsyncTask.Status.RUNNING));
为什么功能
webservice.updateallCatNews();
不执行?
答案 0 :(得分:0)
您可以使用线程来检查这一点。使用处理程序,您可以发送消息。通过检查消息您可以执行进一步的过程。连接线程与UI的唯一可能方法是使用处理程序。我认为这篇文章代码可以帮助你。
Thread animator = new Thread() {
public void run() {
int i = 0;
try {
sleep(2000);
while (i < 4) {
sleep(50);
handler.sendMessage(handler.obtainMessage(i));
i++;
}
} catch (Exception e) {
}
}
};
animator.start();
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == 0) {
animatedimage.setImageResource(R.drawable.sub1);
} else if (msg.what == 1) {
animatedimage.setImageResource(R.drawable.sub2);
} else if (msg.what == 2) {
animatedimage.setImageResource(R.drawable.sub3);
} else if (msg.what == 3) {
animatedimage.setImageResource(R.drawable.sub4);
}
}
};