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