2016-11-25 7 views
5

私のAndroid AppにはSQLiteデータベースとコンテンツプロバイダがあります。このコンテンツプロバイダは、アプリのAndroidManifest.xmlに登録されています。それはエクスポートされていないので、私のアプリだけがそれを見ることができます。コンテンツプロバイダを使用している場合にデータベースを再作成

ユーザーのプロファイルをリセットする際に、このデータベースを完全に消去し、最初から再作成したいと考えています。最初はアクティビティのコンテキストからdeleteDatabase()を呼び出してみました。これは動作しますが、アプリが閉じられた後に再開された場合に限ります。それ以外の場合は、データベースが読み取り専用であるという行を挿入しようとするとクラッシュします。 deleteDatabase()を呼び出す前に、最初に接続を閉じる必要があることを理解しています。しかし、接続はコンテンツプロバイダによって管理されており、私が理解する限り、手動で閉じるべきではありません。

代わりに、ContentResolvercall()メソッドを使用して、テーブル内のすべてのデータを削除し、シーケンスカウントを手動でリセットするカスタム関数を呼び出しています。

これは機能しますが、今では手動で各テーブルからデータを削除する必要があり、今後変更を加える必要があります。

ContentProviderを使用しているとき、私の DatabaseHelperSQLiteOpenHelper)トリガーの onCreate()をデータベース全体を削除し、持っている良い方法はありますか?

+0

なぜすべてのコンテンツを削除するだけではなく、再作成しますか? –

+0

@DiegoTorresMilano私は、各テーブル/行を削除する必要がなく(したがってdeleteDatabaseを呼び出そうとせずに)データベースを新鮮な状態にすばやく更新しようとしていて、最初の設定プロセスで新しいプロファイルを再設定する走る現在、私はすべての行のデータを削除していますが、deleteDatabaseを呼び出すことに近いものがあれば興味があります。 – Programmer001

+0

まだ開いている間にファイルを削除しようとしないでください。 –

答えて

1

カスタム関数がテーブルを削除して再作成することをお勧めします。 onCreate()のテーブルを作成するコードはすでにDatabaseHelperです。 DatabaseHelperとカスタムメソッドの両方でアクセス可能なこの場所をリファクタリングしてください。

+0

右。 deleteDatabaseが機能しなかった後、テーブルを削除することから始めましたが、onCreateを呼び出す代わりに、すべての行を削除してシーケンスカウントをリセットすることにしました。あなたの答えはまた働くでしょう。もう少し推論のためにディエゴへの返事を見てください。他の回答がない場合は、これを回答として受け入れることができます。 – Programmer001

関連する問題