0

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

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

不执行?

4

1 回答 1

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

    };
于 2012-05-02T11:10:08.797 回答