我有一个包含两个活动的应用程序。
其中一个列出了几个值,而另一个将新值添加到数据库中。
我有一个类,它从 SQLiteOpenHelper 扩展并管理数据库连接、查询等。
现在,我知道在 SQLiteOpenHelper 的构造函数中,您必须传递一个上下文,该上下文用于确定它是否必须创建新数据库或打开现有数据库。
但是,如果我在每个活动中都有一个 SQLiteOpenHelper 类的实例,那么上下文会有所不同。
有没有办法避免这种情况?
谢谢。
我有一个包含两个活动的应用程序。
其中一个列出了几个值,而另一个将新值添加到数据库中。
我有一个类,它从 SQLiteOpenHelper 扩展并管理数据库连接、查询等。
现在,我知道在 SQLiteOpenHelper 的构造函数中,您必须传递一个上下文,该上下文用于确定它是否必须创建新数据库或打开现有数据库。
但是,如果我在每个活动中都有一个 SQLiteOpenHelper 类的实例,那么上下文会有所不同。
有没有办法避免这种情况?
谢谢。
传入应用程序上下文 (.getApplication()) 而不是 Activity。这样,两个实例都将使用相同的上下文访问数据库。
Context可能不同但不会创建不同的数据库。SQLiteOpenHelper构造函数有一个name参数,即数据库文件名。如果存在,则无论是否Context通过都不会创建。
实际上,创建的数据库与上下文的应用程序包相关联。因此,您是否传递了 Application 上下文或 Activity 上下文并不重要。
/**
* 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);