我构建了一个SQL Lite处理程序类,它扩展了SQLiteOpenHelper:
public class DatabaseHandler extends SQLiteOpenHelper
该类有这个构造函数:
public DatabaseHandler(Context context)
{
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
我如何在多个活动中使用此课程?这是我的整个应用程序?
当我尝试从另一个活动实例化该类时,它会产生错误,因为上下文是错误的。
从多个活动中过量数据库的最佳做法是什么?
答案 0 :(得分:0)
每个活动都应该有自己的SQLiteDatabase实例。
有关该主题的更多讨论,请参阅Do I need to call getWritableDatabase() everytime I manipulate data,包括示例代码。
答案 1 :(得分:0)
采取全局静态
Utils.class
public static DatabaseHandler data;
SplashActivity.class
Utils.data=new PortfolioDatabaseManager(getBaseContext());
您可以通过访问以下内容,根据您的需要在任何课程中使用它:
Utils.data
您可以添加getReadDatabase&数据库类中的getWriteDatabase:
public SQLiteDatabase getReadDatabase(Context context){
// create or open the database
DatabaseHandler helper = new DatabaseHandler(context);
SQLiteDatabase data = helper.getReadableDatabase();
return data;
}
public SQLiteDatabase getWriteDatabase(Context context){
// create or open the database
DatabaseHandler helper = new DatabaseHandler(context);
SQLiteDatabase data = helper.getWritableDatabase();
return data;
}
答案 2 :(得分:0)
您可以使用Application类扩展该类,然后可以从任何活动中使用该类的所有成员和函数。您可以使您的类成为Global类的成员,并在整个应用程序中使用它。
像这样:
class Global extends Application
{
........
........
}
答案 3 :(得分:0)
在管理持久数据时,OOP中的最佳做法是使用“网关模式”。
网关封装并集中应用程序数据库,以便于访问。
public class OfflineGateway(){
private static OfflineGateway instance;
private Activity activity;
private OfflineGateway(){
//some initialization
}
public static OfflineGateway getInstance(Activity activity){
if(instance == null)
instance = new OfflineGateway();
return instance;
}
//private accessible methods
private String getStringData(){
//do something here
}
private void setStringData(String string){
//do something here
}
}