0

创建数据库后,我使用此代码执行一些查询:

    Database bd= new Database(this);

    .............

    bD.open();
    ListView listContent = (ListView) findViewById(android.R.id.list);
    Cursor query = bD.getData(my query goes here);
    MyAdapt cursorAdapter = new MyAdapt(this, query, 0);
    listContent.setAdapter(cursorAdapter);
    bD.close();

这按预期工作。

现在,如果我在调用时增加我的数据库版本号,bD.open()因为新版本号更高,onUpgrade则调用该方法并

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVesion) {

            db.execSQL("DROP TABLE IF EXISTS " + BD_TABLE);

            new UpgradeDb().execute(...some params here...);
    }

我有这个:

public class UpgradeDb extends AsyncTask<String, String, String> {

    protected void onPreExecute(String... params) {
        super.onPreExecute();
        progresso = ProgressDialog.show(ctx, params[0], params[1]);

        progresso.setCancelable(false);
    }

    @Override
    protected String doInBackground(String... params) {
        downloadDB(params[2], params[3]);
        return params[1];
    }

    @Override
    protected void onPostExecute(String dbInstalled) {
        getPref = PreferenceManager.getDefaultSharedPreferences(ctx);
        SharedPreferences.Editor pref = getPref.edit();


        pref.putBoolean(dbInstalled, true);
        pref.commit();

        progresso.dismiss();

        super.onPostExecute(null);
    }
}

UpgradeDb 是public class Database extends Activity. 在这堂课中,我有private class DbHelper extends SQLiteOpenHelperpublic class UpgradeDb extends AsyncTask<String, String, String>

我得到并且'SQLite返回:错误代码= 1:msg =没有这样的表.....'

我认为这是因为bD.open();已删除表并且仍在Cursor query = bD.getData(my query goes here);尝试访问数据时仍在进行升级。

所以我的问题是我该如何解决这个问题,即等待asynctask完成?

4

0 回答 0