首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:188)

在android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:188)
EN

Stack Overflow用户
提问于 2014-09-12 06:38:49
回答 1查看 546关注 0票数 0

下面是我的Databasehelper类代码

代码语言:javascript
复制
    public class ThemeData extends SQLiteOpenHelper
     {
        // All Static variables
        private static final int DATABASE_VERSION = 4;// Database Version
        private static final String DATABASE_NAME = "listenemdb";// Database Name
        private static final String TABLE_THEME_ELEMENTS = "themelist";// table name
        //  Table Columns names
        static String   DB_ID = "dbthemeid";
        static String   DB_BGIMAGE = "dbbg";
        static String   DB_PLAY = "dbplay";
        static String   DB_PAUSE= "dbpause";
        static String   DB_SHARE = "dbshare";
        static String   DB_TICK = "dbtick";
        static String   DB_OPARROW ="dboparrow";
        static String   DB_OPSCREEN ="dbopscreen";
        static String   DB_FWD = "dBfwd";
        static String   DB_RWD = "dbrwd";
        static String   DB_BOOK= "dbbook";
        static String   DB_UNBOOK = "dbunbook";
        static String   DB_REPLAY = "dbreplay";
        static String   DB_USERSEL ="dbusersel";
        static String   DB_BACK ="dbback";
        static String   DB_NTRANS= "dbnexttrans";
        static String   DB_PTRANS ="dbprevtrans";
        static String   DB_PGBAR ="dbpgbar";

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

        // Creating Tables
        @Override
        public void onCreate(SQLiteDatabase db)
    {
            String CREATE_THEME_TABLE = "CREATE TABLE " + TABLE_THEME_ELEMENTS + "("+
                    DB_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                    DB_BGIMAGE + " TEXT,"
                    + DB_PLAY + " TEXT," 
                    + DB_PAUSE + " TEXT," 
                    + DB_SHARE + " TEXT,"
                    + DB_TICK + " TEXT," 
                    + DB_OPARROW + " TEXT," 
                    + DB_OPSCREEN + " TEXT,"
                    + DB_FWD + " TEXT," 
                    + DB_RWD + " TEXT," 
                    + DB_BOOK + " TEXT,"
                    + DB_UNBOOK + " TEXT," 
                    + DB_REPLAY + " TEXT," 
                    + DB_USERSEL + " TEXT,"
                    + DB_BACK + " TEXT," 
                    + DB_NTRANS + " TEXT," 
                    + DB_PTRANS + " TEXT,"
                    + DB_PGBAR + " TEXT" + ")";
            db.execSQL(CREATE_THEME_TABLE);
        }
        // Upgrading database
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
     {
            db.execSQL("DROP TABLE IF EXISTS " + TABLE_THEME_ELEMENTS);// Drop older table if existed
            onCreate(db);// Create tables again
        }
        // All CRUD(Create, Read, Update, Delete) Operations

        // Adding  elements
        public void addtheme(ThemeElements th)
        {
            SQLiteDatabase dbwrite = this.getWritableDatabase();
            ContentValues articlevalues = new ContentValues();
            articlevalues.put(DB_BGIMAGE,th.getBgimage());
            articlevalues.put(DB_PLAY,th.getPlayimage());
            articlevalues.put(DB_PAUSE,th.getPauseimage());
            articlevalues.put(DB_SHARE,th.getShareimage());
            articlevalues.put(DB_TICK,th.getTickimage());
            articlevalues.put(DB_OPARROW,th.getOptionarrow());
            articlevalues.put(DB_OPSCREEN,th.getOption_screen_bg());
            articlevalues.put(DB_FWD,th.getFwdimage());
            articlevalues.put(DB_RWD,th.getRwdimage());
            articlevalues.put(DB_BOOK,th.getBookmark());
            articlevalues.put(DB_UNBOOK,th.getUnbookmark());
            articlevalues.put(DB_REPLAY,th.getReplayimg());
            articlevalues.put(DB_USERSEL,th.getUsersel());
            articlevalues.put(DB_BACK,th.getBack());
            articlevalues.put(DB_NTRANS,th.getNexttransition());
            articlevalues.put(DB_PTRANS,th.getPrevtransition());
            articlevalues.put(DB_PGBAR,th.getPgbarcolor());
            dbwrite.insert(TABLE_THEME_ELEMENTS, null, articlevalues);// Inserting Row
        }

        // Getting single theme
        public ThemeElements getrow(int id) 
        {
            SQLiteDatabase dbread = this.getReadableDatabase();
                    String[] ALL_COLUMNS={
                    DB_ID,DB_BGIMAGE, DB_PLAY, DB_PAUSE,DB_SHARE,DB_TICK,DB_OPARROW,DB_OPSCREEN,
                    DB_FWD,DB_RWD,DB_BOOK,DB_UNBOOK,DB_REPLAY,DB_USERSEL,DB_BACK,DB_NTRANS,DB_PTRANS,DB_PGBAR}; 
            Cursor cursor=dbread.query(TABLE_THEME_ELEMENTS, ALL_COLUMNS, "dbthemeid = " + id, null, null, null, null);
            if (cursor != null)
                cursor.moveToFirst();
            ThemeElements singleitem = new ThemeElements(Integer.parseInt(cursor.getString(0)), cursor.getString(1), cursor.getString(2),
                    cursor.getString(3), cursor.getString(4), cursor.getString(5), cursor.getString(6),  cursor.getString(7),
                    cursor.getString(8), cursor.getString(9), cursor.getString(10), cursor.getString(11),
                    cursor.getString(12), cursor.getString(13), cursor.getString(14), cursor.getString(15), cursor.getString(16),  cursor.getString(17));
            return singleitem;
        }

        //getting user selected themecards 
        public List<ThemeElements> getthemecards()
        {
            List<ThemeElements> Cardlist = new ArrayList<ThemeElements>();
            String selectQuery = "SELECT DB_USERSEL FROM " + TABLE_THEME_ELEMENTS;
            SQLiteDatabase dbreadcard = this.getReadableDatabase();
            Cursor cursor = dbreadcard.rawQuery(selectQuery, null);
            if (cursor.moveToFirst())   // looping through all rows and adding to list
            {
                do
                {
                    ThemeElemes themitem = new ThemeElements(); 
                    themitem.setUsersel(cursor.getString(13));
                    Cardlist.add(themitem);// Adding to list
                } while (cursor.moveToNext());
            }
            return Cardlist;
        }
    }

在项目的两个地方正在处理类,一个在活动类,另一个在片段

在活动中,我访问getrow(int id)方法,在片段中,我访问getthemecards()方法。

在片段中,出现了一个错误,表示NULLpointer异常

代码语言:javascript
复制
               List<ThemeElements> elems = te.getthemecards();   
                System.out.println("what is elemes"+elems);

我将上下文作为themeData类传递给ThemeData td=new ThemeData(getActivity());,从而引入了这个类。

Logcat中的错误

代码语言:javascript
复制
java.lang.NullPointerException
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:224)
at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:188)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-12 06:44:40

此NPE是通过将nullContext传递给助手构造函数而引起的。

在这里传递上下文:

代码语言:javascript
复制
ThemeData td=new ThemeData(getActivity())

在将片段附加到活动之前,您可能会过早地初始化ThemeData。将初始化推迟到片段生命周期的稍后阶段,即on...()生命周期回调之一。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25802226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档