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();

しかし、アクティビティやサービスを拡張していないクラスでこれを実行しようとすると、単にコンテキストを渡せません。

DBを開くための正しいアプローチは何ですか?どこでやるべきですか?

公式のgreendao以外にいくつかのチュートリアルリンクを提供できれば(私はそこに答えを見つけることができませんでした)、それは素晴らしいことです。

4

2 に答える 2

8

カスタム アプリケーション オブジェクトを提供し、そのコンテキストを使用します (つまり、アプリケーション コンテキスト)。

AndroidManifest ファイルで、Application を拡張するクラスを提供します。

<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's が呼び出された後に呼び出す限り、onCreate安全です。instanceこれはアプリケーション コンテキストであるため、アプリが存続している限り存続することに注意してください。(例えば、漏れの危険がない)

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

Context を持つクラス (Activity または Service) から、OpenHelper を呼び出すクラスに Context を渡すことができます。

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 に答える