简体   繁体   English

在Application类中将SQLiteDatabase实例用作静态字段是一个好主意吗?

[英]Is it a good idea to use SQLiteDatabase instance as a static field in Application class?

I developing a dictionary android app. 我开发了一个字典Android应用程序。 i am using a database in app to get word and it's meaning. 我在应用程序中使用数据库来获取单词,这就是意义。 is it a good way to use a static SQLiteDatabase in Application class and use it in some activities and classes? Application类中使用静态SQLiteDatabase并在某些活动和类中使用它是一种好方法吗?

public class App extends Application {
  public static SQLiteDatabase database;

  @Override
  public void onCreate() {
    super.onCreate();

    database = SQLiteDatabase.openOrCreateDatabase(
            Constants.MAIN_DB_PATH,
            null);
  }

and use it in this ways: 并以这种方式使用它:

public class MainActivity extends AppCompatActivity {
    ...

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        ...

        Cursor cursor = App.database.rawQuery(query, null);

        ...

    }
}

and: 和:

public class MyClass{
    ...

    public MyClass() {
        ...

        Cursor cursor = App.database.rawQuery(query, null);

        ...
    }

}

Since you need only one instance of this object, this is a practicable approach. 由于只需要该对象的一个​​实例,因此这是一种可行的方法。 You can define the database: 您可以定义数据库:

public class Database{
    private static SQLiteDatabase localDatabase = null;
    private Database(){}

    public static SQLiteDatabase getLocalDatabase(){
        if (localDatabase == null){
            localDatabase = SQLiteDatabase.openOrCreateDatabase(...);
        }
        return localDatabase;
    }
}

In your activity code, you can use it like: 在活动代码中,您可以像这样使用它:

Database.getLocalDatabase().rawQuery(...); 

EDIT: To apply all rules of the Singleton-Pattern, also add a private & empty constructor, so you cannot instantiate the object accidentially. 编辑:要应用Singleton-Pattern的所有规则,还添加一个私有和空的构造函数,因此您不能意外地实例化该对象。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM