3

如果我理解正确,在使用 DB 时,我必须执行以下操作

DaoMaster.OpenHelper helper = new DaoMaster.OpenHelper(this, "test-db", null) {

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        }
    };
    SQLiteDatabase db = helper.getWritableDatabase();
    DaoMaster daoMaster = new DaoMaster(db);
    daoSession = daoMaster.newSession();

但是,如果我尝试在不扩展活动或服务的类中执行此操作,我根本无法传递它们的上下文。

打开我的数据库的正确方法是什么?应该在哪里做?

如果你能提供除官方greendao之外的一些教程链接(我在那里找不到答案),那就太好了。

4

2 回答 2

8

提供自定义应用程序对象并使用其上下文(即应用程序上下文)。

在您的 AndroidManifest 文件中,提供一个扩展应用程序的类。

<application android:label="@string/app_name"
             android:name=".MyApp"
             >

MyApp 类如下所示:

public class MyApp extends Application {

    private static MyApp instance;
    public MyApp() {
        instance = this;
    }

    public static MyApp getInstance() {
        return instance;
    }
....

所以现在每当您需要应用程序中的上下文时,您都可以调用MyApp.getInstance. 只要你在调用 MyApp 之后调用它onCreate,你就安全了。请记住,这instance是您的应用程序上下文,因此只要您的应用程序还活着,它就会一直存在。(例如没有泄漏的危险)

new DaoMaster.OpenHelper(MyApp.getInstance(), "test-db", null)
于 2013-01-21T00:02:40.403 回答
-1

您可以将上下文从拥有它的类(活动或服务)传递给您要从中调用 OpenHelper 的类:

Public class NonActivity {
 private Context context;

   public NonActivity(Context context) {
       this.context = context;
    }
}

并使用它:

new OpenHelper(context, "test-db", null).

于 2013-01-20T11:42:43.827 回答