我有一个包含两个活动的应用程序。
其中一个列出了几个值,而另一个将新值添加到数据库中。
我有一个类,它从 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);