4

私はアンドロイドとormliteで働いています。を初期化するのに問題がありますForeignCollection

私はこれを見つけました、それを初期化するために:dao.getEmptyForeignCollection()

しかし、daoの場合はDatabaseHelper、が必要です。databasehelperの場合は、applicationContextが必要ですが、エンティティにはコンテキストがありません。他に選択肢はありますか?

そしてこれがコードであり、その1:nの関係です。クラスチーム:

@DatabaseField(canBeNull = true, foreign = true)
private Club club;

クラスクラブ:

@DatabaseField(canBeNull = true, foreign = true)
private ForeignCollection<Team> teams;

手伝ってくれてありがとう

4

2 に答える 2

2

あなたの質問は外国のコレクションについてではなく、ORMLiteがAndroidの下でどのように配線されるかについてです。これはすべて、ドキュメントで説明されています。

http://ormlite.com/docs/android

あなたは具体的に尋ねました:

しかし、daoの場合は、が必要DatabaseHelperであり、データベースヘルパーの場合はアプリケーションが必要ですContextが、エンティティにはコンテキストがありません。他に選択肢はありますか?

Androidでは、、、、を拡張するActivityListActivityクラスServiceTabActivity ですContextオンラインドキュメントからクラス階層を確認できます。

java.lang.Object
    ↳ android.content.Context
        ↳ android.content.ContextWrapper
            ↳ android.view.ContextThemeWrapper
                ↳ android.app.Activity

Webサイトから入手できるAndroidのサンプルプロジェクトを見ると、Androidアプリケーションがどのように一般的に配線されているかがわかります。

  • あなたのメインActivityは伸びますOrmLiteBaseActivity

    public class HelloAndroid extends OrmLiteBaseActivity<DatabaseHelper> {
    
  • onCreateメソッドは、ORMLiteとそれ自体を:として使用してOrmLiteBaseActivity構築します。DatabaseHelperOpenHelperManagerContext

    OpenHelperManager.getHelper(this.getApplicationContext());
    
  • このOrmLiteBaseActivity.getHelper()メソッドを使用してヘルパーにアクセスし、DAOを作成して、データベースに永続化できるようにします。

于 2012-04-11T12:39:25.377 に答える
1

必要な依存関係を注入する必要があります。

エンティティにデータベースヘルパーが必要な場合は、それを提供します。データベースヘルパーにコンテキストが必要な場合は、それを指定してください。

必要な依存関係を必須にするコンストラクターをクラスに提供します。

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

次に、アクティビティまたはアプリケーションモデルから、

new DataHelper( this );

依存関係を注入します。

先験的に、onCreateメソッドのアクティビティごとに新しいデータベースヘルパーを作成するよりも、データベースヘルパーに一般的なコンテキストを提供するアプリケーションクラスを使用することは興味深いことです。

于 2012-04-11T10:34:42.213 に答える