2011-06-09 11 views
3

次のバージョンのアプリケーションでは、データベースをアップグレードする必要があり、これにはかなりの時間がかかります。進行状況をユーザーに更新するprogressDialogを表示したいと思います。問題は、どのようにしてダイアログを作成するのか、私は分かりません。データベースをアップグレードするときに進捗ダイアログを表示する

私の基本的な設定は、基本的にはスプラッシュスクリーンであるということです。この画面上に進捗状況を示したいと思います。別のDbAdapter.javaファイルがあります。ここで、DatabaseHelperクラスはSQLiteOpenHelperを継承しています。ここでは、onUpgradeをオーバーライドします(アップグレード部分はうまく動作しています)。

進捗ダイアログを実装するためにいくつかの場所を試しましたが、適切な場所を見つけることができません。私はスプラッシュスクリーンのアクティビティからonUpgradeにコンテキストを渡そうとしましたが、onUpgradeを実行するとContentProviderからコンテキストが取得されているようです。

データベースをアップグレードするときに進行状況ダイアログを表示する方法の良い例がありますか?

+0

をあなたが示すいくつかのコードを提供することができればそれが役立つだろうまさにあなたがやっていること。 –

答えて

3

AsyncTaskを実装する必要があります。例:次に、あなただけの

new YourAsyncTask().execute();

を呼び出す必要があり

class YourAsyncTask extends AsyncTask<Void, Void, Void> { 

    private ProgressDialog progressDialog; 

    @Override 
    protected void onPreExecute() { 
     //show your dialog here 
     progressDialog = ProgressDialog.show(this, "title", "message", true, false) 
    } 

    @Override 
    protected Void doInBackground(Void... params) {   
     //update your DB - it will run in a different thread 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     //hide your dialog here 
     progressDialog.dismiss(); 
    } 
} 

あなたがここにAsyncTask詳細を読むことができます:http://developer.android.com/reference/android/os/AsyncTask.html

+1

私はDatabaseHelperのonUpgradeから呼び出されたAsyncTaskを実際に使用していますが、内部にProgressDialogを作成していませんでした。上記のコードを使用して実装しようとしましたが、ProgressDialog.showを使用してこのエラーが発生しました。 ProgressDialogタイプのshow(Context、CharSequence、CharSequence、boolean、boolean)メソッドは、引数(SpellDbAdapter.DatabaseHelper。 upgradeTask、String、String、boolean、boolean) 私が間違っていることを知っていますか? – anakin78z

+0

もう少し調べてみると、私は、私のケースではスプラッシュ画面のアクティビティを使ってダイアログを作成しなければならないと思うので、 'this'を使用しても動作しません。それで...どうすればいいの? SQLiteOpenHelperによって呼び出されるonUpgradeからそのアクティビティを取得するにはどうすればよいですか? – anakin78z

+0

@ anakin78z "this"をAsyncTaskに渡すのではなく、XPTOと呼ばれる場合は、代わりに "XPTO.this" – pandre

0
ProgressDialog myProgressDialog = null; 
public void DownloadFiles() { 
     myProgressDialog = ProgressDialog.show(this, "Please wait !", 
       "Updating...", true); 
     new Thread() { 
      public void run() { 
       try { 
         //Your upgrade method ! 
         YourUpdateFunction(); 
       } catch (Exception e) { 
        Log.v(TAG, "Error"); 
       } 
       myProgressDialog.dismiss(); 
      } 
     }.start(); 
    } 
関連する問題