データベースを作成した後、次のコードを使用してクエリを実行します。
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
できますか?