2010-11-18 8 views
0

私はSQLiteOpenHelperクラスを使用してオープンデータベースを作成しています。私のアプリケーションのために、私は書き込み可能なオブジェクトSQLiteDatabaseを作成しています。これは、データベースにデータを読み書きするために使用しています。このオブジェクトはメインクラスに対して静的であり、すべてのアプリケーションでデータベースへの書き込みを読み込むために使用されます。私のアプリケーションはエミュレータで正常に動作しています。一部の読み取り書き込みクエリが発生した後のデバイス上で発生します。なぜ起きているのか、誰かが解決策を持っていれば私に助けてください。アンドロイドのsqliteアプリケーションがデバイスで強制的に閉じられています

答えて

0

ヘルパーを静的インスタンスとして使用することはお勧めしません。むしろ、あなたはDBにアクセスする必要があるたびにインスタンスを生成する必要があります。何が起こっているのかは、DB接続がAndroidによって閉じられているということです(メモリが必要なため、開いている接続が多すぎるため...)、クエリを実行すると接続がまだ開いているかどうかを確認しません。

this tutorialを読むと、正しく行う方法がわかります。

基本的にアクティビティ内、アイデア:

private void reloadData() { 
    MyDBHelper db = new MyDBHelper(this.getApplicationContext()); 
    db.open(); 
    Cursor c = db.query(...); 
    db.close(); 

    // Update your data using the cursor 
} 
0

私は数週間前に同じ問題を抱えていた、と私はそれが間違っているまさにだ、このpageを見つけました。 SQLiteはAndroidでバグがあり、間違った方法で実装されているため、データベース/テーブルへのスレッドの読み書きは同時にできません。
setLockingEnabled()は、想定どおりに動作しません。

私がしたことは、db "Synchronized"を読み書きするすべてのメソッドを実行していたことです。つまり、スレッド数に関わらず同時にデータを読み書きすることに問題はありません。

よろしくお願いいたします。 Tobias

関連する問題