1

次のライブラリを使用しています。

ormlite-android-4.28.jar ormlite-core-4.28.jar roboguice-2.0.jar guice-3.0-no_aop.jar guice-assistedinject-3.0-rc2.jar android-support-v13.jar

インジェクション サービスはすべて正常に動作していますが、次のシナリオで問題が発生しています。次のように DaoProvider を作成しました。

public class DaoProvider<T extends DatabaseEntity, ID> implements Provider<Dao<T, ID>>

私の AbstractModule クラスは次のようになります。

bind(new TypeLiteral<Dao<CityPersist, Integer>>() {
        }).toProvider(new DaoProvider<CityPersist, Integer>(ormLiteSqliteOpenHelper.getConnectionSource(), CityPersist.class))

私の CityDao は次のようになります。

@ImplementedBy(CityDaoImpl.class)
public interface CityDao
    extends Dao<CityPersist, Long>
{
    ConnectionSource getConnectionSource();

    CityPersist create(JSONObject json);

    CityPersist findByCityId(String cityId);
}

私が抱えている問題は、AbstractModule で ConnectionSource を作成しようとしていることです。roboguice 1 を使用している場合は、次のように設定できます。

public ClientServicesModule(OrmLiteSqliteOpenHelper ormLiteSqliteOpenHelper)
    {
         super();
         this.ormLiteSqliteOpenHelper = ormLiteSqliteOpenHelper;
    }

Application クラスに新しい AbstractModule を作成します。ただし、roboguice 2 で同じものを作成できる場所を見たことがあります。

何か案は?

前もって感謝します。

4

1 に答える 1

0

解決策を見つけました。

次のように、abstractmodules クラスによって更新されます。

bind(DealsDao.class).toProvider(new DaoProvider<DealPersist, DealsDao>(OpenHelperManager.getHelper(context, DatabaseHelper.class).getConnectionSource(),Deal.class)).in(Scopes.SINGLETON);

次に、ヘルパー クラスは次のようになります。

public class DatabaseHelper
    extends OrmLiteSqliteOpenHelper
{

    private static final String LOG_TAG = "DatabaseHelper";
    private static final String DATABASE_NAME = "Data.db";
    private static final int DATABASE_VERSION = 1;
    private Dao<Deal, Integer> dealDAO = null;

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

    /**
     * This is called when the database is first created. Usually you should call createTable statements here to create the tables that will store
     * your data.
     */
    @Override
    public void onCreate(SQLiteDatabase db, ConnectionSource connectionSource)
    {
        try
        {           
            TableUtils.createTable(connectionSource, Deal.class);
        }
        catch (SQLException ex)
        {           
            throw new RuntimeException(ex);
        }
    }

    /**
     * This is called when your application is upgraded and it has a higher version number. This allows you to adjust the various data to match the
     * new version number.
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, ConnectionSource connectionSource, int oldVersion, int newVersion)
    {

    }

}

今、すべてが動作します!さまざまなソリューションの組み合わせ...

于 2013-01-07T10:42:35.743 に答える