0

这是我的问题:我想显示一个布局,说明(当应用程序启动时)数据库正在更新。更新周期完成后,我想使用“add_multiple_categories_layout(0)”方法以不同的布局加载数据。我只需要在应用程序启动时这样做;之后更新应该在后台运行,用户可以使用该应用程序。

为此,我创建了一个布尔 DBupdated,并在 1 个更新周期后将其设置为 true,并且新布局替换了“正在更新数据库...”布局。

当活动恢复时,它应该再次显示“正在下载数据库......”因此在 onResume 中我将 DBupdated 更改为 false。

它在我启动应用程序时有效,但在恢复后它不会从“正在下载 db ...”更改布局,就好像布尔值保持为真,即使我在 onResume 中更改它。

这是代码:

 protected void onResume() {

            super.onResume();
            setContentView(R.layout.home_screen_layout);

            add_downloading_DB_layout();        
            DBupdated = false;
            new UpdateDB().execute(CATEGORY_URL, PRODUCTS_URL, TIMESTAMP_URL_CATEGORIES,       TIMESTAMP_URL_PRODUCTS);
        }

public class UpdateDB extends AsyncTask<String, Integer, String> {

        @Override
        protected String doInBackground(String... params) {
            int whatToUpdate;
            while( 1+1 == 2 ){
                //update the database
                if(DBupdated==false)
                {
                    DBupdated = true;
                    publishProgress();
                }
                try {   Thread.sleep(36000000);     } catch (InterruptedException e) {e.printStackTrace();}
            }
        }

        @Override
        protected void onProgressUpdate(Integer... values) {
            // TODO Auto-generated method stub
            super.onProgressUpdate(values);
            add_multiple_categories_layout(0);
        }

    }
4

1 回答 1

0

The boolean variable DBupdated in your activity is probably different from the one in your AsyncTask. Are you using a static reference to UpdateDB? What you could do is just create a new task. Do you really need that boolean? Otherwise you can add parameters to the asynctask constructor. Or keep the variable in the activity and call the asynctask only when needed.

Also you can use while (true) instead of 1+1=2

and ! DBupdated instead of DBupdated ==false.

Why are you sleeping so long?

于 2013-08-09T09:28:16.987 回答