Android getWritableDatabase()抛出NullPointerException或MLite

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

这是我在从OrmLiteSqliteOpenHelper扩展而来的DatabaseHandler类中使用的方法集:

@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;
   }
   }