找不到具有helper类的单个(Context)参数的公共构造函数

时间:2014-07-03 09:17:02

标签: android android-studio ormlite

这是一个奇怪的问题。我不敢相信自己的眼睛。这是不可能的。我在stackoverflow上阅读所有方法,但它们不起作用。我也试图清理,重新进口项目...... bla bla.Please给出任何建议。这个问题让我很难过。

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;

import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper;
import com.j256.ormlite.support.ConnectionSource;
import com.j256.ormlite.table.TableUtils;
import com.paktor.R;
import com.paktor.ormlite.entity.PaktorContact;
import com.paktor.ormlite.entity.PaktorMessage;

import java.sql.SQLException;

public class DatabaseHelper extends OrmLiteSqliteOpenHelper {

    /************************************************
     * Suggested Copy/Paste code. Everything from here to the done block.
     ************************************************/

    private static final int DATABASE_VERSION = 1;
    private static final String DATABASE_NAME = "data.sql";

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

    /************************************************
     * Suggested Copy/Paste Done
     ************************************************/

    @Override
    public void onCreate(SQLiteDatabase sqliteDatabase,
            ConnectionSource connectionSource) {
        try {
            // create table
            TableUtils.createTable(connectionSource, PaktorContact.class);
            TableUtils.createTable(connectionSource, PaktorMessage.class);
        } catch (SQLException e) {
        }
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqliteDatabase,
            ConnectionSource connectionSource, int oldVer, int newVer) {
    }
}

一个简单的直觉类:

import android.content.Context;

import com.j256.ormlite.android.apptools.OpenHelperManager;

public class OrmliteManager {

    private static DatabaseHelper helper;

    public synchronized static DatabaseHelper manager() {
        if (helper == null) {
        }
        return helper;
    }

    public synchronized static void initialize(Context context) {
        if (helper != null) {
            OpenHelperManager.releaseHelper();
        }
        helper = OpenHelperManager.getHelper(context, DatabaseHelper.class);
    }

    // only call it when we have no long use it
    public synchronized static void release() {
        OpenHelperManager.releaseHelper();
        helper = null;
    }
}

我在oncreate方法中初始化databaseHelper:

public class Application extends android.app.Application {

    @Override
    public void onCreate() {
        super.onCreate();
        OrmliteManager.initialize(getApplicationContext());

并且有错误:

07-03 16:04:37.454    9849-9849/com.paktor E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.RuntimeException: Unable to create application com.paktor.service.Application: java.lang.IllegalStateException: Could not find public constructor that has a single (Context) argument for helper class class com.paktor.ormlite.DatabaseHelper
            at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4283)
            at android.app.ActivityThread.access$1300(ActivityThread.java:138)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1263)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4874)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.IllegalStateException: Could not find public constructor that has a single (Context) argument for helper class class com.paktor.ormlite.DatabaseHelper
            at com.j256.ormlite.android.apptools.OpenHelperManager.constructHelper(OpenHelperManager.java:215)
            at com.j256.ormlite.android.apptools.OpenHelperManager.loadHelper(OpenHelperManager.java:170)
            at com.j256.ormlite.android.apptools.OpenHelperManager.getHelper(OpenHelperManager.java:78)
            at com.paktor.ormlite.OrmliteManager.initialize(OrmliteManager.java:21)
            at com.paktor.service.Application.onCreate(Application.java:22)
            at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:999)
            at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4280)
            at android.app.ActivityThread.access$1300(ActivityThread.java:138)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1263)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4874)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.NoSuchMethodException: <init> [class android.content.Context]
            at java.lang.Class.getConstructorOrMethod(Class.java:460)
            at java.lang.Class.getConstructor(Class.java:431)
            at com.j256.ormlite.android.apptools.OpenHelperManager.constructHelper(OpenHelperManager.java:213)
            at com.j256.ormlite.android.apptools.OpenHelperManager.loadHelper(OpenHelperManager.java:170)
            at com.j256.ormlite.android.apptools.OpenHelperManager.getHelper(OpenHelperManager.java:78)
            at com.paktor.ormlite.OrmliteManager.initialize(OrmliteManager.java:21)
            at com.paktor.service.Application.onCreate(Application.java:22)
            at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:999)
            at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4280)
            at android.app.ActivityThread.access$1300(ActivityThread.java:138)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1263)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4874)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
            at dalvik.system.NativeStart.main(Native Method)

1 个答案:

答案 0 :(得分:3)

我花了很多时间来解决这个问题。 希望这可以帮助你

#OrmLite uses reflection
-keep class com.j256.**
-keepclassmembers class com.j256.** { *; }
-keep enum com.j256.**
-keepclassmembers enum com.j256.** { *; }
-keep interface com.j256.**
-keepclassmembers interface com.j256.** { *; }

#We are not done yet, add the following as well.

-keepclassmembers class * { 
    public <init>(android.content.Context); 
 } 

-keepattributes *Annotation*

#Only if the above haven't fixed then, go with keeping your db class files and its members.
#In your case, that would be

-keep class com.paktor.ormlite.**
-keepclassmembers class com.paktor.ormlite.** { *; }

了解更多详情: Proguard with OrmLite on Android