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

标签 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 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]

那是我的数据库助手类

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;
    }
}

我在 Activity 中尝试这样做时遇到了问题

MyDatabaseHelper helper = OpenHelperManager.getHelper(this,MyDatabaseHelper.class);
RuntimeExceptionDao<Truck, Integer> truckDao = helper.getTruckRuntimeExceptionDao();

所以数据库助手类是public的,Activity类扩展了Activiy。

最佳答案

对于那些在启用 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);
}

也检查一下 Stackoverflow - proguard-with-ormlite-on-android

关于android - Orm Lite - 找不到具有辅助类的单个(上下文)参数的公共(public)构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23685166/

相关文章:

android - 没有缩放的ImageView

使用外部构建工具进行 Java 内容辅助/重构

Android 警告 - 忽略 InnerClasses 属性(jnamed)

android - Ormlite RawRowMapper 截断 double

android - OrmLite 多线程

java - 无法编译 ORMLite 语句

java - 使用流进行迭代时,ForeignCollection 会抛出 SQLException

android - 设置包含布局的子元素的属性

android - Recyclerview - 无法在滚动回调中调用此方法

JavaFX,将 ArrayList 转换为 ObservableList