创建数据库后,我使用此代码执行一些查询:
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 SQLiteOpenHelper
和public class UpgradeDb extends AsyncTask<String, String, String>
我得到并且'SQLite返回:错误代码= 1:msg =没有这样的表.....'
我认为这是因为bD.open();
已删除表并且仍在Cursor query = bD.getData(my query goes here);
尝试访问数据时仍在进行升级。
所以我的问题是我该如何解决这个问题,即等待asynctask
完成?