2012-01-05 10 views
0

現在、アンドロイドプロジェクトのデータベース部分で作業しています。このプロジェクトの主な目的は、XMLファイルを解析し、その解析としてデータベースを格納することです。私はデータベースを開き、データベースにデータを挿入しています。しかし、私が活動を変更しようとすると、データベースのclose()関数でクラッシュします。 私はここで何か間違っていることを知っています。もし誰かがここで私を助けることができればそれは素晴らしいことになるでしょう。Androidでのデータベース接続を閉じるには

/* DatabaseManager.java */

SQLiteDatabase db; 
public DatabaseManager(Context context){ 
    this.context = context; 

    db = context.openOrCreateDatabase(DATABASE_NAME, 0, null); 
    } 

    public void close(){ 
    if (db != null) 
    { 
     db.close(); 
    } 
    } 

/** Activity.java **/

public void onCreate(Bundle savedInstanceState) { 

    try{ 
     super.onCreate(savedInstanceState); 
     DB = new DatabaseManager(this); 
    } 
    } 

public void onDestroy(){ 
    super.onDestroy(); 

    if(DB!=null) 
     DB.close(); 
} 

エラー:

E/Database(676): close() was never explicitly called on database '/data/data/org.com.android/databases/MainSQLite.db' 
enter code here 
+1

何イムを推測されますが、最初に 'DB'を閉じ、' super.onDestroy() 'を呼び出すべきではないのですか? – Nanne

+0

私はDB.close()を最初に呼び出してからsuper.OnDestroy()を呼び出してコードを元に戻しましたが、それでも失敗します。 – Change

答えて

1

あなたのコードを見ると、あなたがsuper.onDestroy()を呼び出しているので正しくDbをクローズしています。コードがdb.close()メソッドを呼び出す前に

onDestroy()メソッドの外に呼び出してみてください。

+0

onDestroy()の外ではどこを理想的に呼び出すべきですか? – Change

+0

データベースを終了したらdb.close()を呼び出すだけで、たとえばonDestroyの外で呼び出す必要があります。 –

+2

私は、onDestroy()を使わないことを強く勧めます。特に、システムがリソースを再生しているときに必ず呼び出されるわけではありません。私は一般的にonStopとonResumeを使ってそのようなことをコントロールします。 – Pyrodante

0

これはただduing :-)

private DbHelper ourHelper; 



private static class DbHelper extends SQLiteOpenHelper{ 

    public DbHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     // TODO Auto-generated constructor stub 
    }} 

public void close(){ 
    ourHelper.close(); 
} 
関連する問題