Foo*_*ife 1 sqlite android ormlite
我正在使用带有sqlite的ormlite.但我们得到的错误是:
07-11 12:39:10.680:E/AndroidRuntime(1415):致命异常:主07-11 12:39:10.680:E/AndroidRuntime(1415):进程:com.mmd.testormlite,PID:1415 07-11 12:39:10.680:E/AndroidRuntime(1415):java.lang.IllegalStateException:找不到OpenHelperClass,因为类com.mmd.testormlite.MainActivity的泛型参数都没有扩展OrmLiteSqliteOpenHelper.您应该使用getHelper(Context,Class).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):在android.view.View $ PerformClick.run(View.java:18422)07-11 12:39:10.680:E/AndroidRuntime(1415):在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(141 5):在android.os.Looper.loop(Looper.java:136)07-11 12:39:10.680:E/AndroidRuntime(1415):在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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
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;
}
}
Run Code Online (Sandbox Code Playgroud)
这是错误中的重要一行:
E/AndroidRuntime(1415):java.lang.IllegalStateException:找不到OpenHelperClass,因为类com.mmd.testormlite.MainActivity的通用参数都没有扩展OrmLiteSqliteOpenHelper.您应该使用getHelper(Context,Class).
OrmLite正在尝试使用您传入的上下文(在本例中MainActivity)作为OpenHelperClass.
从ORMLite文档中OpenHelperManager.getHelper(Context ctx):
类似于
getHelper(Context, Class)(推荐),除了我们必须通过其他方式找到帮助程序类.这种方法要求Context是一个扩展ORMLite的Android基类之一的类,如OrmLiteBaseActivity.需要在strings.xml中设置或者辅助类.
所以,你有四个选择:
OrmLiteBaseActivity.<string name="open_helper_classname">your.package.name.DatabaseHelper</string>或类似内容OpenHelperManager.setOpenHelperClass(Class openHelperClass)DatabaseManager类中提供一个具体的类名,如下所示:helper = OpenHelperManager.getHelper(context, DatabaseHelper.class);最后,你问为什么OpenHelperManager.release();被弃用了.我不确定为什么它被弃用(文档表明这可能只是一个命名/约定更改),但你应该使用它OpenHelperManager.releaseHelper();.
| 归档时间: |
|
| 查看次数: |
712 次 |
| 最近记录: |