Orm Lite – No se pudo encontrar el constructor público que tiene un solo argumento (Context) para la clase helper

Estoy usando OrmLite 4.47. He seguido muchos tutoriales, y leer otras preguntas sobre stackoverflow, pero no puedo entender cómo resolver este problema.

Ese es el mensaje completo

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] 

Esa es mi base de datos

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

Y tengo el problema cuando en mi actividad trato de hacer eso

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

Por lo tanto, la clase auxiliar de base de datos es pública y la clase Actividad extiende Activiy.

5 Solutions collect form web for “Orm Lite – No se pudo encontrar el constructor público que tiene un solo argumento (Context) para la clase helper”

Trate de limpiar el proyecto … es extraño porque el código se ve bien enaugh para trabajar 🙂

Para aquellos que se ejecutan en este error con minify enabled (proguard):

Agregue la siguiente configuración para 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); } 

Compruebe esto también Stackoverflow – proguard-with-ormlite-on-android

Compruebe la parte de importación de la clase que utiliza la clase MyDatabaseHelper. Parece que su método getHelper utiliza un constructor por defecto incorrecto.

Su mensaje de error,

 java.lang.IllegalStateException: Could not find public constructor that has a single (Context) argument for helper class class com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper 

Si utiliza la clase MyDatabaseHelper correctamente, debe ser

 java.lang.IllegalStateException: Could not find public constructor that has a single (Context) argument for helper class class 'yourpackage'.MyDatabaseHelper 

Para explicar el error,

Por defecto OrmLiteSqliteOpenHelper clase sólo tiene un constructor como a continuación, no tiene un constructor que tiene un único argumento (contexto).

 public DatabaseHelper(Context context, SQLiteDatabase.CursorFactory factory) { super(context, DATABASE_NAME, factory, DATABASE_VERSION); } 

Por lo que podría provocar un error IllegalStateException.

Cree un constructor vacío en su clase POJO o bean. Problema resuelto 🙂

EX.

 public Truck(){ //empty constructor in custom class } 

Aceptar esto cómo pude resolver mi problema progurad-reglas no funcionó para mí; Así que lo que hice fue, hice construtor de la clase DatabaseHelper como público y luego inicializé el objeto DatabaseHelper pasando el contexto Activity en su constructor, en onCreate () Método de actividad donde quería buscar datos o enviar;

Este es el constructor público,

  public DatabaseHelper(Context context) { super(context,DB_NAME,null,DB_VERSION,R.raw.ormlite_config); } 

Aquí intialized sobre objeto de la clase:

  databaseHelper = new DatabaseHelper(this); 
  • Java.sql.SQLException: No se puede ejecutar insert stmt en objeto
  • ORMLite con CursorAdapter en Android
  • ORMLite restablecer todas las tablas
  • ¿Qué es un buen tutorial para usar ORMLite con SQLite y Android
  • Actualizaciones de miembros extranjeros de ORMLite
  • La función Android andmlite like () no funciona
  • Cómo actualizar la columna con ORMLite
  • Configuración de ejecución de Android Studio para la generación de configuración de ORMLite
  • ¿Cómo ORMlite gestiona la herencia entre clases Java?
  • ¿Cómo conectarse a una solicitud pendiente con RoboSpice (Splash> Actividad principal)?
  • Usando limit () y offset () en QueryBuilder (ANDROID, ORMLITE)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.