从所有活动中访问SQLite对象

时间:2013-12-17 05:41:26

标签: java android sqlite

我构建了一个SQL Lite处理程序类,它扩展了SQLiteOpenHelper:

public class DatabaseHandler extends SQLiteOpenHelper

该类有这个构造函数:

public DatabaseHandler(Context context) 
{
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

我如何在多个活动中使用此课程?这是我的整个应用程序?

当我尝试从另一个活动实例化该类时,它会产生错误,因为上下文是错误的。

从多个活动中过量数据库的最佳做法是什么?

4 个答案:

答案 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
  }
}