SQLite Asset Helperライブラリを使用して、アプリのデータベースのセットアップとアップグレードという厄介な作業を処理しています。それは非常にうまく機能しますが、残念ながら、ライブラリが次の場合にユーザーに通知する方法をまだ見つけていません。
A) データベースを初めてロードします (\assets\databases\ フォルダから解凍します)。
また
B) データベースをアップグレードします (\assets\datates にあるアップグレードされたデータベース ファイルの情報を使用)
このコードをアプリのメインのActivity.onCreate()に入れてみました。データベースが存在しない場合はメインスレッドにロードできると考え、却下できないAlertDialogでユーザーの注意をそらしました。
File dbFile=this.getDatabasePath("gShoJMDict");
Boolean dbExists = dbFile.exists();
Log.i("ActivityStartScreen", String.valueOf(dbExists));
if(!dbExists)
{
DialogFirstRun dialogFirstRun = new DialogFirstRun();
dialogFirstRun.show(getSupportFragmentManager(), "dialogFirstRun");
dialogFirstRun.setCancelable(false);
DictHelper helper = new DictHelper(this);
helper.getReadableDatabase();
helper.close();
dialogFirstRun.dismiss();
}
残念ながら、(LogCat エントリに基づいて) SQLite Asset Helper は onCreate() のかなり前にデータベースが存在するかどうかを確認するように見えます。したがって、上記のコードのチャンクが実行されるまでに、データベースはすでに存在するため、ダイアログは表示されません。
私は ContentProvider を使用しており、query() または update() 内から getReadableDatabase() のみを呼び出していることを確認しました。私の ContentProvider の onCreate() は次のようになります...
@Override
public boolean onCreate()
{
// Load our database
gdb = new JMDictHelper(getContext());
return true;
}
...しかし、移動にもかかわらずgdb = new JMDictHelper(getContext()); query() または update() の場合、SQLite Asset Helper ライブラリは、ユーザーに通知する前にデータベースをロードします。
この状況で、データベースの初期セットアップまたはアップグレードを傍受し、アプリがこれらのタスクの実行でビジーであることをユーザーに通知するにはどうすればよいですか? 現在、アプリはライブラリが終了するまで何もせずにそこに座っています。これは、期待できることを知っているのでテストには問題ありませんが、アプリを公開する準備ができたら、そのままにしておくことはできません。