我在一个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;
}
}
我正在使用扩展的帮助程序类:
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;
}
这个想法是创建DataAccess
类并让它创建(DBHelper
如果尚未创建)。
有人可以告诉我这是对是错,还是我走对了路?
谢谢!
我在一个Android项目中使用ORMLite,并且我不想使用扩展活动,因为我是在AsyncTask上将值插入数据库中。
您的路线正确,但@Matt有点偏离。坦白说,如果没有扩展我们的基类,我从来没有做过一个项目。但这是一个很好的练习,因此我创建了这个ORMLite示例项目,该项目使用an
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;
}
您[很明显],然后通过类似以下操作在代码中使用它:
Dao<SomeObject, Integer> someObjectDao = getHelper().getSomeObjectDao();
因此,每当您getHelper()
第一次打电话时,它将通过管理器获取帮助者,从而建立与数据库的连接。每当您的应用程序被操作系统销毁时,它都会释放帮助程序-
如果是最新版本,则可能会关闭基础数据库连接。
请注意,如果您甚至没有基类就这样做,则将第一个OpenHelperManager.getHelper()
需要使用。Context``Activity
编辑:
如果您确实想创建一个DataAccess
类型类来集中处理helper类,那么您将需要使这些方法静态化并做自己的使用计数器。如果有多个活动和后台任务在呼叫,getHelper()
那么问题是您何时呼叫releaseHelper()
?您必须为每个get计数增加一个计数,并且只有在计数器回到0时才释放该计数。但是即使如此,我仍然不确定100%可以从活动类中节省多少行。
我正在为导航构建一个基本活动,并希望有一些灵活的活动,这样活动就可以向基本活动指定要膨胀的布局。 有没有更好的方法实现这一点?也许用一个内容框架设置一个基本布局,然后膨胀到那个? 如有任何建议,将不胜感激。
无法启动活动ComponentInfo{com.app.mobile.android.dev/com.app.mobile.android.splashscreen}:java.lang.IllegalArgumentException:没有为类绑定的注入器工厂。注入器工厂被绑定为com.delta.mobile.android.splashScreen:[com.app.mobile.andro
我只是开始尝试在我非常简单的项目上使用Hilt。现在它都是在Dagger2上,但我想迁移到Hilt。 我有一个活动: 和下面这样的基本活动: 或者(就像我用匕首那样): 另外,我只是一个初学者,所以,也许我错过了什么。我将继续搜索:) 感谢您的时间和回答:) java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“Android.content.pm.Appli
我试图遵循这个答案,其主要思想是覆盖中的,该活动将由所有活动扩展,因此只有将具有导航抽屉。 然而,在我尝试实现答案后,我的导航从未显示(即使在)。我就是这么做的: 这是导航抽屉的xml: 这是我重写的(在中): 这是我在上的,注意我使用的是而不是: 最后,我只需要像往常一样扩展类和代码。 更新 根据答案,这是我的工作覆盖:
问题内容: 我在AngularJS中设置了这样的路由: 我在顶部栏上有一些链接的标签样式。如何根据当前模板或URL将“活动”类添加到选项卡? 问题答案: 一种无需依赖URL即可解决此问题的方法是在配置过程中向每个部分添加自定义属性,如下所示: 在您的控制器中公开: 根据当前活动选项卡设置类:
我是Kafka的初来乍到,有一些基本的怀疑。我试着做一个Kafka建立的多节点(主动-主动)。情况如下:- 运行单个zookeeper(端口:2181) 创办了三家Kafka经纪人(9092、9093、9094) 创建单个主题测试(分区:1,复制3) 使用代理列表启动生产者(9092,9093) 在9092、9093、9094上启动了使用者,但它们都在使用相同的主题。 现在我怀疑的是,当我从生产者