0
webservice.UpdateAllNews();

この関数は、オンライン データベースからローカル データベースにデータをダウンロードします。

私が欲しいのは、関数がすべてのデータをダウンロードしたことを検出した後、次のアクティビティを起動したいということです。

P/S データが大きい

これが私の現状です

webservice.UpdateAllNews();
                int secondsDelayed = 17;
                new Handler().postDelayed(new Runnable() {
                    public void run() {
                        startActivity(new Intent(Main_Launcher.this,
                                Main_AllLatestNews.class));
                        finish();
                    }
                }, secondsDelayed * 1000);

これは別のクラス関数です

public void UpdateAllNews() {
    try {
        List<List_CategoryNews> newsCat = dbhelper.getAllNewsCategories();
        for (List_CategoryNews nwCat : newsCat) {

            int CatNewsID = nwCat.getCatID();

            if (CatNewsID != 0) {
                dbhelper.DeleteNews(CatNewsID);
                GetNews(CatNewsID, datetemp1, datetemp2);

            }

            String log = " NewsCatID- " + nwCat.getCatID()
                    + " category Name- " + nwCat.getNewCatName();
            System.out.println(log);
        }
    } catch (Exception ex) {
        AlertDialog.Builder b = new AlertDialog.Builder(mContext);
        b.setMessage(ex.toString());
        b.show();
    }
}

これは17秒後に一定の起動です。17秒の遅延ではなく、オンラインデータベースからのデータのダウンロードが完了した後に自動開始アクティビティが必要です。

なにか提案を?

4

2 に答える 2

1

多分 AsyncTask を使用してみてください:

private class YourTask extends AsyncTask<String, Void, String> 
{
    @Override
    protected String doInBackground(String... urls) 
    {
         webservice.UpdateAllNews();
    }

    @Override
    protected void onPostExecute(String result) 
    {
      startActivity(new Intent(Main_Launcher.this,Main_AllLatestNews.class));
      finish();
    }
}

そしてそれを実行する方法:

YourTask task = new YourTask();
task.execute("...");
于 2012-04-30T12:08:56.043 に答える
0

Observer-Observable のような単純なクライアント サーバー方式を使用しないのはなぜですか? タスクが完了すると、オブザーバブルはオブザーバーの update 関数を呼び出します。これが主なアクティビティになります。

于 2012-05-01T07:25:43.660 に答える