Mat*_* W. 12 java android ormlite
我在android项目中使用ORMLite,我不想使用扩展活动,因为我在AsyncTask上将值插入数据库.
在文档中它说:
"如果你不希望延长OrmLiteBaseActivity
与其他基类,那么你将需要复制它们的功能.你需要调用OpenHelperManager.getHelper(Context context, Class openHelperClass)
你的代码的开始,保存帮手,当你想使用它了,然后调用OpenHelperManager.release()
时你完成了它."
它还说要添加数据库助手类strings.xml
,我有.所以我不确定我做错了什么.
我正在使用一个名为DataAccess
我的数据层的类,如下所示:
public class DataAccess {
private Context context;
private DBHelper dbHelper;
public DataAccess(Context _context) {
this.context = _context;
dbHelper = getDBHelper(_context);
}
private DBHelper getDBHelper(Context context) {
if (dbHelper == null) {
dbHelper = (DBHelper) OpenHelperManager.getHelper(context, DBHelper.class);
}
return dbHelper;
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用扩展的助手类:
public class DBHelper extends OrmLiteSqliteOpenHelper {
private static final String DATABASE_NAME = "database.db";
private static final int DATABASE_VERSION = 1;
private Dao<SomeObject, Integer> someObjectTable = null;
private ConnectionSource connectionSource = null;
public DBHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db, ConnectionSource connectionSource) {
this.connectionSource = connectionSource;
try {
TableUtils.createTable(connectionSource, SomeObject.class);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
@Override
public void onUpgrade(SQLiteDatabase db, ConnectionSource connectionSource, int oldVersion, int newVersion) {
}
public Dao<SomeObject, Integer> getSomeObjectDao() throws SQLException {
if (someObjectTable == null) {
dateTable = getDao(SomeObject.class);
}
return someObjectTable;
}
Run Code Online (Sandbox Code Playgroud)
我们的想法是创建DataAccess
类,并创建它,DBHelper
如果它还没有.
有人可以告诉我这是对还是错,或者我是否走在正确的道路上?
谢谢!
Gra*_*ray 15
我在Android项目中使用ORMLite,而我不希望因为我值插入上的AsyncTask数据库使用扩展活动.
你是在正确的轨道,但有点离开@Matt.坦率地说,如果不扩展我们的基类,我就不会完成一个项目.但这是一个很好的练习,所以我创建了这个ORMLite示例项目,该项目使用Activity
并管理自己的帮助器.
你的DBHelper
课很好但是你真的不需要你的DataAccess
课.在您的每项活动(或服务......)中,您需要具备以下内容:
private DBHelper dbHelper = null;
@Override
protected void onDestroy() {
super.onDestroy();
if (dbHelper != null) {
OpenHelperManager.releaseHelper();
dbHelper = null;
}
}
private DBHelper getHelper() {
if (dbHelper == null) {
dbHelper = (DBHelper)OpenHelperManager.getHelper(this, DBHelper.class);
}
return dbHelper;
}
Run Code Online (Sandbox Code Playgroud)
你[显然],然后通过做类似的事情在你的代码中使用它:
Dao<SomeObject, Integer> someObjectDao = getHelper().getSomeObjectDao();
Run Code Online (Sandbox Code Playgroud)
因此,无论何时getHelper()
第一次调用,都会通过管理器获取帮助程序,建立与数据库的连接.每当您的应用程序被操作系统销毁时,它都会释放帮助程序 - 如果它是最后一个版本,可能会关闭底层数据库连接.
请注意,如果您在没有基类的情况下执行此操作,则OpenHelperManager.getHelper()
需要Context
作为第一个参数Activity
.
编辑:
如果您确实想要创建一个DataAccess
类型类来集中处理帮助程序类,那么您需要将这些方法设置为静态并执行您自己的使用计数器.如果有多个活动和后台任务调用,getHelper()
那么问题是你releaseHelper()
什么时候打电话?当计数器回到0时,你必须为每次获取增加一个计数,并且只有呼叫释放.但即使这样,我也不能100%确定你从活动类中节省了多少行.
归档时间: |
|
查看次数: |
4938 次 |
最近记录: |