2014-07-11 3 views
1

의 일반 매개 변수가 없기 때문에 sqlite에 ormlite를 사용하고 있습니다. 그러나 우리는 오류를지고 등이있다 :OpenHelperClass를 찾을 수 없습니다.

07-11 12:39:10.680: E/AndroidRuntime(1415): FATAL EXCEPTION: main 07-11 12:39:10.680: E/AndroidRuntime(1415): Process: com.mmd.testormlite, PID: 1415 07-11 12:39:10.680: E/AndroidRuntime(1415): java.lang.IllegalStateException: Could not find OpenHelperClass because none of the generic parameters of class class com.mmd.testormlite.MainActivity extends OrmLiteSqliteOpenHelper. You should use getHelper(Context, Class) instead. 07-11 12:39:10.680: E/AndroidRuntime(1415): at com.j256.ormlite.android.apptools.OpenHelperManager.lookupHelperClass(OpenHelperManager.java:273) 07-11 12:39:10.680: E/AndroidRuntime(1415): at com.j256.ormlite.android.apptools.OpenHelperManager.getHelper(OpenHelperManager.java:105) 07-11 12:39:10.680: E/AndroidRuntime(1415): at data.DatabaseManager.getHelper(DatabaseManager.java:17) 07-11 12:39:10.680: E/AndroidRuntime(1415): at data.Repo.(Repo.java:13) 07-11 12:39:10.680: E/AndroidRuntime(1415): at com.mmd.testormlite.MainActivity$1.onClick(MainActivity.java:28) 07-11 12:39:10.680: E/AndroidRuntime(1415): at android.view.View.performClick(View.java:4438) 07-11 12:39:10.680: E/AndroidRuntime(1415): at android.view.View$PerformClick.run(View.java:18422) 07-11 12:39:10.680: E/AndroidRuntime(1415): at android.os.Handler.handleCallback(Handler.java:733) 07-11 12:39:10.680: E/AndroidRuntime(1415): at android.os.Handler.dispatchMessage(Handler.java:95) 07-11 12:39:10.680: E/AndroidRuntime(1415): at android.os.Looper.loop(Looper.java:136) 07-11 12:39:10.680: E/AndroidRuntime(1415): at android.app.ActivityThread.main(ActivityThread.java:5017) 07-11 12:39:10.680: E/AndroidRuntime(1415): at java.lang.reflect.Method.invokeNative(Native Method) 07-11 12:39:10.680: E/AndroidRuntime(1415): at java.lang.reflect.Method.invoke(Method.java:515) 07-11 12:39:10.680: E/AndroidRuntime(1415): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 07-11 12:39:10.680: E/AndroidRuntime(1415): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 07-11 12:39:10.680: E/AndroidRuntime(1415): at dalvik.system.NativeStart.main(Native Method)

DatabaseManager 클래스 :

public class DatabaseManager<H extends OrmLiteSqliteOpenHelper> { 

    private H helper; 

    public H getHelper(Context context) 
    { 
     if(helper == null) 
     { 
      helper = (H) OpenHelperManager.getHelper(context);//The method getHelper(Context) from the type OpenHelperManager is deprecated. why ? 
     } 
     return helper; 
    } 

    public void releaseHelper(H helper) 
    { 
     if (helper != null) { 
      OpenHelperManager.release();//The method getHelper(Context) from the type OpenHelperManager is deprecated. why ? 
      helper = null; 
     } 
    } 

} 

DatabaseHelper 클래스 :

public class DatabaseHelper extends OrmLiteSqliteOpenHelper{ 
    private static final String DATABASE_NAME = "db.sqlite"; 
    private static final int DATABASE_VERSION = 1; 

    private Dao<News, Integer> userDao = null; 


    public DatabaseHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 

     DatabaseInitializer initializer = new DatabaseInitializer(context); 
     try { 
      initializer.createDatabase(); 
      initializer.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

    } 


    @Override 
    public void onCreate(SQLiteDatabase db, ConnectionSource connectionSource) { 
     try { 
      Log.i(DatabaseHelper.class.getName(), "onCreate"); 

      TableUtils.createTable(connectionSource, News.class); 

     } catch (SQLException e) { 
      Log.e(DatabaseHelper.class.getName(), "Can't create database", e); 
      throw new RuntimeException(e); 
     } 
    } 


    @Override 
    public void onUpgrade(SQLiteDatabase db, ConnectionSource connectionSource, int oldVersion, int newVersion) { 
     try { 
      Log.i(DatabaseHelper.class.getName(), "onUpgrade"); 

      TableUtils.dropTable(connectionSource, News.class, true); 

      onCreate(db); 
     } catch (SQLException e) { 
      Log.e(DatabaseHelper.class.getName(), "Can't drop databases", e); 
      throw new RuntimeException(e); 
     } 
    } 

    @Override 
    public void close() { 
     super.close(); 
     userDao = null; 
    } 

    public Dao<News, Integer> getNewsDao() { 
     if (userDao == null) { 
      try { 
       userDao =DaoManager.createDao(getConnectionSource(), News.class); 
      } catch (SQLException e) { 
       e.printStackTrace(); 
      } 
      } 
      return userDao; 
    } 
} 

답변

5

이 오류의 중요한 라인 :

E/AndroidRuntime(1415): java.lang.IllegalStateException: Could not find OpenHelperClass because none of the generic parameters of class class com.mmd.testormlite.MainActivity extends OrmLiteSqliteOpenHelper. You should use getHelper(Context, Class) instead.

OrmLite가 노력하고 있습니다. e 전달한 컨텍스트 (이 경우, MainActivity) 을 OpenHelperClass으로 지정합니다. ORMLite documentation for OpenHelperManager.getHelper(Context ctx)에서

:

Similar to getHelper(Context, Class) (which is recommended) except we have to find the helper class through other means. This method requires that the Context be a class that extends one of ORMLite's Android base classes such as OrmLiteBaseActivity . Either that or the helper class needs to be set in the strings.xml.

그래서, 당신은 네 가지 옵션이 있습니다 : 당신은 단순히 도우미 클래스를 얻기 위해 당신의 활동 상황을 전달하는

  • 를, 당신의 활동 확장 할 수있다 OrmLiteBaseActivity.
  • 당신은 detailed in the docs로 strings.xml의 파일에서 클래스 이름을 설정할 수 있습니다 : <string name="open_helper_classname">your.package.name.DatabaseHelper</string> 또는 유사한는
  • 당신이 당신의 DatabaseManager 클래스의 구체적인 클래스 이름을 제공 할 수 OpenHelperManager.setOpenHelperClass(Class openHelperClass)
  • 를 호출하여 클래스 이름을 설정할 수 있습니다, like : helper = OpenHelperManager.getHelper(context, DatabaseHelper.class);

마지막으로, OpenHelperManager.release();이 사용되지 않는 이유를 묻습니다. 확실하지 않습니다. 이유가 (더 이상 사용되지 않음) (문서는 단순히 명명/규칙 변경 일 수 있음을 나타내지 만) 대신 OpenHelperManager.releaseHelper();을 사용해야합니다.

+0

고맙습니다. thankssssssssssssssss –