Android Orm Lite-找不到具有帮助器类的单个(上下文)参数的公共构造函数

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

我用的是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 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);