Android Orm Lite-找不到具有帮助器类的单个(上下文)参数的公共构造函数
我用的是OrmLite 4.47。 我学习了很多教程,并阅读了其他关于stackoverflow的问题,但我不知道如何解决这个问题 这就是完整的信息Android Orm Lite-找不到具有帮助器类的单个(上下文)参数的公共构造函数,android,ormlite,Android,Ormlite,我用的是OrmLite 4.47。 我学习了很多教程,并阅读了其他关于stackoverflow的问题,但我不知道如何解决这个问题 这就是完整的信息 05-15 16:36:13.805: E/AndroidRuntime(15382): Caused by: java.lang.IllegalStateException: Could not find public constructor that has a single (Context) argument for helper clas
05-15 16:36:13.805: E/AndroidRuntime(15382): Caused by: java.lang.IllegalStateException: Could not find public constructor that has a single (Context) argument for helper class class com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper
05-15 16:36:13.805: E/AndroidRuntime(15382): Caused by: java.lang.NoSuchMethodException: <init> [class android.content.Context]
05-15 16:36:13.805:E/AndroidRuntime(15382):原因:java.lang.IllegalStateException:找不到具有帮助器类com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper的单个(上下文)参数的公共构造函数
05-15 16:36:13.805:E/AndroidRuntime(15382):由以下原因引起:java.lang.NoSuchMethodException:[class-android.content.Context]
这是我的databaseHelper类
public class MyDatabaseHelper extends OrmLiteSqliteOpenHelper {
// name of the database file for your application -- change to something
// appropriate for your app
private static final String DATABASE_NAME = "databas.db";
// any time you make changes to your database, you may have to increase the
// database version
private static final int DATABASE_VERSION = 1;
//genera molte eccezioni
private Dao<Truck, Integer> truckDao = null;
//genera una sola eccezione a runtime
private RuntimeExceptionDao<Truck, Integer> truckRuntimeDao=null;
public MyDatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase database, ConnectionSource connectionSource) {
// TODO Auto-generated method stub
try {
TableUtils.clearTable(connectionSource, Truck.class);
} catch (java.sql.SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int OldVersion,
int newVersion) {
// TODO Auto-generated method stub
try {
TableUtils.dropTable(connectionSource, Truck.class, true);
onCreate(database,connectionSource);
} catch (java.sql.SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public Dao<Truck, Integer> getTruckDao() throws java.sql.SQLException{
if(truckDao==null){
truckDao=getDao(Truck.class);
}
return truckDao;
}
public RuntimeExceptionDao<Truck, Integer> getTruckRuntimeExceptionDao(){
if(truckRuntimeDao==null){
truckRuntimeDao=getRuntimeExceptionDao(Truck.class);
}
return truckRuntimeDao;
}
}
公共类MyDatabaseHelper扩展了OrmLiteSqliteOpenHelper{
//应用程序数据库文件的名称--更改为
//适合您的应用程序
私有静态最终字符串数据库\u NAME=“databas.db”;
//在对数据库进行任何更改时,都可能需要增加
//数据库版本
私有静态最终int数据库_VERSION=1;
//蜕皮属
私有Dao-truckDao=null;
//一个运行时
私有运行时ExceptionDAO truckRuntimeDao=null;
公共MyDatabaseHelper(上下文){
super(上下文、数据库名称、null、数据库版本);
}
@凌驾
public void onCreate(SQLiteDatabase数据库,ConnectionSource ConnectionSource){
//TODO自动生成的方法存根
试一试{
TableUtils.clearTable(connectionSource,Truck.class);
}catch(java.sql.sqle){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
@凌驾
public void onUpgrade(SQLiteDatabase数据库、ConnectionSource ConnectionSource、int OldVersion、,
int(新版本){
//TODO自动生成的方法存根
试一试{
TableUtils.dropTable(connectionSource,Truck.class,true);
onCreate(数据库、连接源);
}catch(java.sql.sqle){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
public Dao getTruckDao()抛出java.sql.SQLException{
if(truckDao==null){
truckDao=getDao(Truck.class);
}
返回卡车道;
}
公共运行时异常DAO getTruckRuntimeExceptionDao(){
if(truckRuntimeDao==null){
truckRuntimeDao=getRuntimeExceptionDao(Truck.class);
}
返回火车站;
}
}
当我在活动中尝试这样做时,我遇到了问题
MyDatabaseHelper helper = OpenHelperManager.getHelper(this,MyDatabaseHelper.class);
RuntimeExceptionDao<Truck, Integer> truckDao = helper.getTruckRuntimeExceptionDao();
MyDatabaseHelper=OpenHelperManager.getHelper(这是MyDatabaseHelper.class);
RuntimeExceptionDao truckDao=helper.getTruckRuntimeExceptionDao();
因此,数据库帮助器类是公共的,而活动类扩展了Activity。尝试清理项目…这很奇怪,因为代码看起来很好,可以正常工作:)检查类的导入部分,该部分使用MyDatabaseHelper类。 您的getHelper方法似乎使用了错误的默认构造函数 您的错误消息
java.lang.IllegalStateException: Could not find public constructor that has a single (Context) argument for helper class class com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper
如果您正确使用MyDatabaseHelper类,它应该是
java.lang.IllegalStateException: Could not find public constructor that has a single (Context) argument for helper class class 'yourpackage'.MyDatabaseHelper
为了解释错误
默认的OrmLiteSqliteOpenHelper类只有一个如下所示的构造函数,
它没有具有单个参数(上下文)的构造函数
因此,它可能会导致IllegalStateException错误。对于那些在启用minify(proguard)的情况下遇到此错误的用户: 为ormlite添加以下配置:
# ormlite
-keep class com.j256.**
-keepclassmembers class com.j256.** { *; }
-keep enum com.j256.**
-keepclassmembers enum com.j256.** { *; }
-keep interface com.j256.**
-keepclassmembers interface com.j256.** { *; }
-keepclassmembers class * {
public <init>(android.content.Context);
}
#或mlite
-保持类com.j256**
-keepclassmembers类com.j256.*{*;}
-保留enum com.j256**
-keepclassmembers enum com.j256.*{*;}
-保留com.j256接口**
-keepclassmembers接口com.j256.*{*;}
-keepclassmembers类*{
public(android.content.Context);
}
也检查一下这个在POJO或bean类中创建一个空构造函数。问题解决:) 前
好吧,这就是我解决问题的方法,程序规则对我不起作用;所以我所做的是,我将DatabaseHelper类构造函数设置为公共的,然后在活动的onCreate()方法中初始化DatabaseHelper对象,将活动上下文传递到其构造函数中,我想在其中获取数据或发送数据 这是公共构造器,
public DatabaseHelper(Context context)
{
super(context,DB_NAME,null,DB_VERSION,R.raw.ormlite_config);
}
在这里,我初始化了上面的类对象:
databaseHelper = new DatabaseHelper(this);
public DatabaseHelper(Context context)
{
super(context,DB_NAME,null,DB_VERSION,R.raw.ormlite_config);
}
databaseHelper = new DatabaseHelper(this);