Android getWritableDatabase()抛出NullPointerException或MLite
这是我在从OrmLiteSqliteOpenHelper扩展而来的DatabaseHandler类中使用的方法集:Android getWritableDatabase()抛出NullPointerException或MLite,android,nullpointerexception,ormlite,getwritabledatabase,Android,Nullpointerexception,Ormlite,Getwritabledatabase,这是我在从OrmLiteSqliteOpenHelper扩展而来的DatabaseHandler类中使用的方法集: @Override public void onCreate(SQLiteDatabase db, ConnectionSource connectionSource) { try { TableUtils.createTable(connectionSource, Category
@Override
public void onCreate(SQLiteDatabase db, ConnectionSource connectionSource)
{
try
{
TableUtils.createTable(connectionSource, Category.class);
TableUtils.createTable(connectionSource, Level.class);
DataParsing a = new DataParsing();
a.wrapCategories();
Log.i(DatabaseHandler.class.getName(), "created new entries in onCreate: " );
}
catch (SQLException e){
Log.e(TAG, "error creating DB " + DATABASE_NAME);
throw new RuntimeException(e);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// Upgrading database
@Override
public void onUpgrade(SQLiteDatabase db, ConnectionSource connectionSource, int oldVer, int newVer)
{
try
{
TableUtils.dropTable(connectionSource, Category.class, true);
TableUtils.dropTable(connectionSource, Level.class, true);
onCreate(db, connectionSource);
}
catch (SQLException e){
Log.e(TAG,"error upgrading db "+DATABASE_NAME+"from ver "+oldVer);
throw new RuntimeException(e);
}
}
public Dao<Category, Integer> getCategoryDao() throws SQLException
{
if (simpleCategoryDao == null) {
simpleCategoryDao = getDao(Category.class);
}
return simpleCategoryDao;
}
public Dao<Level, Integer> getLevelDao() throws SQLException
{
if (simpleLevelDao == null) {
simpleLevelDao = getDao(Level.class);
}
return simpleLevelDao;
}
据我所知,数据库已成功创建。然后我想用以下方法将对象列表放在那里:
public void saveContacts(List<Category> contacts) throws SQLException
{
OrmLiteSqliteOpenHelper dbHelper= DatabaseHandler.getInstance(_context);
String res = Boolean.toString(dbHelper.isOpen());
Log.i(" 123 ",res);
dbHelper.getWritableDatabase();
Dao<Category, Integer> daoContact=dbHelper.getDao(Category.class);
QueryBuilder<Category, Integer> queryBuilder = daoContact.queryBuilder();
daoContact.queryRaw("insert into categories values (hello, 1)");
Log.i("dao",queryBuilder.selectColumns("title").prepare().toString());
for (Category contact : contacts) {
Log.i("dao",contact.toString());
HelperFactory.GetHelper().getCategoryDao().createIfNotExists(contact);
}
}
为什么会这样 public void saveContacts(列出联系人)引发SQLException
public void saveContacts(List<Category> contacts) throws SQLException
{
OrmLiteSqliteOpenHelper dbHelper= DatabaseHandler.getInstance(_context);
String res = Boolean.toString(dbHelper.isOpen());
Log.i(" 123 ",res);
dbHelper= this.getWritableDatabase(); <----- here change will may help you
Dao<Category, Integer> daoContact=dbHelper.getDao(Category.class);
QueryBuilder<Category, Integer> queryBuilder = daoContact.queryBuilder();
daoContact.queryRaw("insert into categories values (hello, 1)");
Log.i("dao",queryBuilder.selectColumns("title").prepare().toString());
for (Category contact : contacts) {
Log.i("dao",contact.toString());
HelperFactory.GetHelper().getCategoryDao().createIfNotExists(contact);
}
}
{
OrmLiteSqliteOpenHelper dbHelper=DatabaseHandler.getInstance(_context);
String res=Boolean.toString(dbHelper.isOpen());
日志i(“123”,res);
dbHelper=this.getWritableDatabase();public void saveContacts(列出联系人)抛出SQLException
{
OrmLiteSqliteOpenHelper dbHelper=DatabaseHandler.getInstance(_context);
String res=Boolean.toString(dbHelper.isOpen());
日志i(“123”,res);
dbHelper=this.getWritableDatabase();通过将我的活动的上下文传递给OrmLiteSqliteOpenHelper解决了问题。
我使用这些类在整个应用程序生命周期中维护对数据库的访问:
public class ApplicationMemory extends Application{
@Override
public void onCreate() {
super.onCreate();
HelperFactory.SetHelper(getApplicationContext());
}
@Override
public void onTerminate() {
HelperFactory.ReleaseHelper();
super.onTerminate();
}
}
及
Where DatabaseHandler-class,它是从OrmLiteSqliteOpenHelper扩展而来,在我的问题中进行了描述
非常感谢。他帮了很多忙。将我活动的上下文传递给OrmLiteSqliteOpenHelper解决了问题。
我使用这些类在整个应用程序生命周期中维护对数据库的访问:
public class ApplicationMemory extends Application{
@Override
public void onCreate() {
super.onCreate();
HelperFactory.SetHelper(getApplicationContext());
}
@Override
public void onTerminate() {
HelperFactory.ReleaseHelper();
super.onTerminate();
}
}
及
Where DatabaseHandler-class,它是从OrmLiteSqliteOpenHelper扩展而来,在我的问题中进行了描述
非常感谢。他帮了很多忙。但是dbHelper是OrmLiteSqliteOpenHelper类的一个实例。使用这个。getWritableDatabase()将其强制转换为SQLitedatabase类。这会导致类型强制转换…您应该将活动的上下文传递给OrmLiteSqliteOpenHelper谢谢!!!您的答案让我找到解决方案。问题出在错误的上下文对象中!!但dbHelper是OrmLiteSqliteOpenHelper类的一个实例。并使用此。getWritableDatabase()将其强制转换为SQLitedatabase类。这会导致类型强制转换…您应该将活动的上下文传递给OrmliteSqliteOpenHelper非常感谢!!!您的答案让我找到解决方案。问题出现在错误的上下文对象中!!
public class ApplicationMemory extends Application{
@Override
public void onCreate() {
super.onCreate();
HelperFactory.SetHelper(getApplicationContext());
}
@Override
public void onTerminate() {
HelperFactory.ReleaseHelper();
super.onTerminate();
}
}
public class HelperFactory {
private static DatabaseHandler databaseHelper;
public static DatabaseHandler GetHelper(){
return databaseHelper;
}
public static void SetHelper(Context context){
databaseHelper = OpenHelperManager.getHelper(context,DatabaseHandler.class);
}
public static void ReleaseHelper(){
OpenHelperManager.releaseHelper();
databaseHelper = null;
}
}