2016-05-16 4 views
2

У меня есть этот классResolve java.lang.NoClassDefFoundError

public class DaoMaster extends AbstractDaoMaster { 
    public static final int SCHEMA_VERSION = 1605131322; 

    /** Creates underlying database table using DAOs. */ 
    public static void createAllTables(SQLiteDatabase db, boolean ifNotExists) { 
     ApplicationConfigDao.createTable(db, ifNotExists); 
     RequestCacheDao.createTable(db, ifNotExists); 
    } 

    /** Drops underlying database table using DAOs. */ 
    public static void dropAllTables(SQLiteDatabase db, boolean ifExists) { 
     ApplicationConfigDao.dropTable(db, ifExists); 
     RequestCacheDao.dropTable(db, ifExists); 
    } 

    public static abstract class OpenHelper extends SQLiteOpenHelper { 

     public OpenHelper(Context context, String name, CursorFactory factory) { 
      super(context, name, factory, SCHEMA_VERSION); 
     } 

     @Override 
     public void onCreate(SQLiteDatabase db) { 
      Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); 
      createAllTables(db, false); 
     } 
    } 

    /** WARNING: Drops all table on Upgrade! Use only during development. */ 
    public static class DevOpenHelper extends OpenHelper { 

     public DevOpenHelper(Context context, String name, CursorFactory factory) { 
      super(context, name, factory); 
     } 

     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
      Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); 
      dropAllTables(db, true); 
      onCreate(db); 
     } 
    } 

    public DaoMaster(SQLiteDatabase db) { 
     super(db, SCHEMA_VERSION); 
     registerDaoClass(ApplicationConfigDao.class); 
     registerDaoClass(RequestCacheDao.class); 
    } 

    public DaoSession newSession() { 
     return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); 
    } 

    public DaoSession newSession(IdentityScopeType type) { 
     return new DaoSession(db, type, daoConfigMap); 
    }  
} 

А потом еще один класс

UPDATE , как указал некоторые из вас, кажется, мое именования это плохо, что глупый Основная ошибка, поэтому я их обновления к следующему

public class DbHelper { 
    public static final String LOGIN_DATA_PREFIX = "LOGIN_DATA_"; 
    public DaoMaster DAOMaster; 
    public DaoSession DAOSession; 
    public DaoMaster.OpenHelper openHelper; 
    public SQLiteDatabase SQLiteDb; 

    private Context context; 

    public static class CONSTANT { 
     public static String DB_FILE_NAME = "app.db"; 

     /* Define all DAO Property Constant Here */ 

     public static class APPLICATION_CONFIG { 
      public static String DAO_NAME = "applicationconfig"; 
      public static String PROPERTY_ID = "Id"; 
      public static String PROPERTY_KEY = "Key"; 
      public static String PROPERTY_VALUE = "Value"; 
     } 

     public static class REQUEST_CACHE{ 
      public static String DAO_NAME = "requestcache"; 
      public static String PROPERTY_URL = "Url"; 
      public static String PROPERTY_METHOD = "Method"; 
      public static String PROPERTY_PARAM = "Param"; 
      public static String PROPERTY_ID = "Id"; 
     } 

     //... 

    } 

    public class DAOWrapper { 
     private DaoSession session; 

     /* Load all DAO Here */ 
     public ApplicationConfigDao ApplicationConfig; 
     public RequestCacheDao RequestCache; 
     // ... 

     public DAOWrapper(DaoSession session){ 
      this.session = session; 

      /* Init all DAO Here */ 
      this.ApplicationConfig = this.session.getApplicationConfigDao(); 
      this.RequestCache = this.session.getRequestCacheDao(); 
      // ... 
     } 
    } 

    public DAOWrapper DAO; 

    public DbHelper(Context context){ 
     this.context = context; 
     this.openHelper = new DaoMaster.DevOpenHelper(this.context, CONSTANT.DB_FILE_NAME, null); 
     this.SQLiteDb = this.openHelper.getWritableDatabase(); 
     this.DAOMaster = new DaoMaster(this.SQLiteDb); 
     this.DAOSession = this.DAOMaster.newSession(); 
     this.DAO = new DAOWrapper(this.DAOSession); 
    } 

    ... 
} 

Но она по-прежнему не

, а затем инициализации класса

this.Db = new DbHelper(this.getApplicationContext()); 

но бросать ошибка во время создания экземпляра DaoMaster.DevOpenHelper, и это говорит о том, что он не может найден класс DevOpenHelper, что случилось с моим кодом?

UPDATE Console Ошибка

5-15 23:22:31.313 20424-20424/com.itp.android.suitetreatadmin E/dalvikvm﹕ Could not find class 'com.itp.android.suitetreatadmin.dao.DaoMaster$DevOpenHelper', referenced from method com.itp.android.suitetreatadmin.DbHelper.<init> 
05-15 23:22:44.190 20424-20424/com.itp.android.suitetreatadmin E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: com.itp.android.suitetreatadmin, PID: 20424 
    java.lang.NoClassDefFoundError: com.itp.android.suitetreatadmin.dao.DaoMaster$DevOpenHelper 
      at com.itp.android.suitetreatadmin.DbHelper.<init>(DbHelper.java:86) 
      at com.itp.android.suitetreatadmin.App.onCreate(App.java:108) 
      at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1007) 
      at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4328) 
      at android.app.ActivityThread.access$1500(ActivityThread.java:135) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:136) 
      at android.app.ActivityThread.main(ActivityThread.java:5001) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:515) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
      at dalvik.system.NativeStart.main(Native Method) 

я знаю, что есть некоторые подобные вопросы, но я думаю, что это дело прецедентной проблемы,

Спасибо за за вашу помощь.

+0

Прежде всего, попробуйте использовать чистую и собирать из Gradle, если вы используете AndroidStudio. – Konstantin

+0

Ваши соглашения об именах не очень хороши .. Вы не можете указать имя переменной, как имя класса. !! –

+0

обновлено, я изменяю их, но он все равно бросает ту же ошибку – 1412

ответ

2

в классе DbHelper вы не можете дать имя объекта совпадает с именем класса, так что вы должны изменить имя объекта, как

DaoMaster daoMaster; 
DaoSession daoSession; 
+0

обновлено, я их модифицирую, но все равно выдаю ту же ошибку – 1412

0

я столкнулся с такой же проблемой мой DBHelper Calss не нагружал бросали ошибку

java.lang.NoClassDefFoundError 

В комментариях 1214 упоминается, что это может быть проблема too many methods, которая связана с памятью. Поэтому я тестировал на одном устройстве с малым API-интерфейсом памяти 19, он выбрасывает java.lang.NoClassDefFoundError, но то же самое приложение работает на другом устройстве с API 21 и улучшает аппаратное обеспечение памяти, чем предыдущее устройство.

Следовательно, это должна быть проблема с памятью или проблема с версией для Android.