AsyncTask以外的任何方式?

时间:2012-05-02 10:23:25

标签: android updating

当我开始活动时,我将执行此操作

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();

不执行?

1 个答案:

答案 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);
            }
        }

    };