androidannotations + ormlite Activityからビジネスロジックを完全に切り離す!
1.pom.xmlにormliteの設定を追記
<!-- ormlite --> <dependency> <groupId>com.j256.ormlite</groupId> <artifactId>ormlite-android</artifactId> <version>4.25</version> </dependency>
2.永続化対象のオブジェクトを作成
てきとーに。。。
@DatabaseTable public class SampleBean { @DatabaseField(generatedId = true) public int id; @DatabaseField public String value; }
3.interfaceの定義
serviceについて、詳しくはこちら
これもてきとー。
public interface SampleService { void save(SampleBean bean); SampleBean find(int id); }
4.DatabaseHelperの実装
これも以前の記事を参照してね。
5.実装
contextをDIできるのでActivityを継承したり、変な手段でContextを渡す必要が無い!!
昔はContextの取得方法がわからなくてロジックの分離をあきらめてたよ。
public class SampleServiceImpl implements SampleService { // package-privateにしてはいけない。 @Inject Context context; public void save(SampleBean bean) { try { Dao<SampleBean, Integer> dao = OpenHelperManager.getHelper(context).getDao(SampleBean.class); dao.create(bean); } catch (SQLException e) { e.printStackTrace(); } } public SampleBean find(int id) { try { Dao<SampleBean, Integer> dao = OpenHelperManager.getHelper(context).getDao(SampleBean.class); return dao.queryForId(id); } catch (SQLException e) { e.printStackTrace(); return null; } } }
6.最後に
これだけで実行するとこんな例外発生しちゃいます。
java.lang.IllegalStateException: Could not find OpenHelperClass because none of its generic parameters extends OrmLiteSqliteOpenHelper: null
OpenHelperClassをManagerに登録しないといけないらしい。
どこでやるのが適切かまだわからないけど、ひとまずApplicationに以下のコードを追加。
public class SampleApplication extends RoboApplication { static { OpenHelperManager.setOpenHelperClass(DatabaseHelper.class); }