2012-11-09 10 views
6

私は2つのアクティビティを持つアプリケーションを持っています。どのように動作するのですか?SQLiteOpenHelperコンテキスト

一方は複数の値を示し、他方は新しい値をDBに追加します。私はクラスのウィッヒ今すぐ

など、SQLiteOpenHelperから延びており、DBの接続を管理し、クエリ持っ

、私はSQLiteOpenHelperのコンストラクタであなたはそれを持っているかどうかを判断するために使用されるコンテキストを渡す必要があることを理解します新しいDBを作成したり、既存のDBを開くことができます。

しかし、各アクティビティにSQLiteOpenHelperクラスのインスタンスが1つある場合、コンテキストは異なります。

これを回避する手段はありますか?

ありがとうございました。

答えて

5

アクティビティの代わりにアプリケーションコンテキスト(.getApplication())を渡します。これにより、両方のインスタンスが同じコンテキストを使用してdbにアクセスします。

2

Contextは異なるものの、異なるDBを作成することはできません。 SQLiteOpenHelper constructorにはnameというパラメータがあります。これがDBファイル名です。これが存在すれば、Contextが渡されても問題は発生しません。

+0

コンテキストは、システムリソースにアクセスするためのインタフェースです。 sabadowが述べたように、どのデータベースが名前によって決定されますか。 –

1

実際には、作成されたデータベースは、コンテキストのアプリケーションパッケージに関連付けられたです。したがって、アプリケーションコンテキストまたはアクティビティコンテキストに合格したかどうかは関係ありません。

Context.java

/** 
* Open a new private SQLiteDatabase associated with this Context's 
* application package. Create the database file if it doesn't exist. 
... 
... 
*/ 
public abstract SQLiteDatabase openOrCreateDatabase(String name, 
     int mode, CursorFactory factory); 
関連する問題