1

このブログに示すように、SQLite Database Browser によって作成されたデータベースを使用する Android アプリケーションがあります: http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/

最初に、データベースが正しく作成されているかどうかを確認するために、2 つのテーブルを持つデータベースを作成し、それらのテーブルの 1 つに 1 つのエントリを含めました。これはうまくいきました。

その後、テーブルの 1 つにさらに 10 個のエントリを入力して保存し、データベースをアセット フォルダーにコピーして (前のフォルダーを上書き)、アプリケーションを実行してから、2 番目から 10 番目のエントリをクエリしました。アプリケーションが強制終了されたため、CursorIndexOutOfBounds エラーが発生しました。

このことから、アプリケーションが何らかの形で作成した新しいデータベースを使用できず、古いデータベース (上書きされたもの) をまだ使用していると推測しました。

これを回避および/または修正する方法はありますか? アプリケーションは、受信したデータベースの最初のバージョンを使用しているように見えますが、そのデータベースが新しいバージョンで上書きされている場合でも同様です。

4

1 に答える 1

1

最初のDB、つまりエントリが1つしかないDBは、アプリのデータベースフォルダーの/ data / data / your-package-name(Androidデバイス上)にまだ存在しているようです。そのチュートリアルのコードは、データベースがデバイスに存在しない場合にのみ、アセットフォルダーからデータベースをコピーします(チュートリアルのcheckDataBase()メソッドを参照してください)。したがって、データベースを/ data / data / your-package-nameから(コードまたはrootアクセスで)削除し、更新されたDBファイルがassetsフォルダーにあることを確認してから、再度実行します。これにより、アセットフォルダーのDBがデバイスに確実にコピーされます。

また、DB_PATHがのcontext.getApplicationInfo().dataDir + "/databases/"代わりに等しいことを確認してください"/data/data/YOUR_PACKAGE/databases/"

于 2013-01-10T15:48:48.080 に答える