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

时间:2014-09-12 06:38:50

标签: android sqlite

这是我的Databasehelper类代码

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

我正在项目的2个地方进行课程,其中一个是活动课,另一个是在片段

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

在片段中我收到错误,在行

中说出NULLpointer异常
               List<ThemeElements> elems = te.getthemecards();   
                System.out.println("what is elemes"+elems);

我通过将上下文作为themeData

传递来引发ThemeData td=new ThemeData(getActivity());

Logcat错误

java.lang.NullPointerException
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:224)
at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:188)

1 个答案:

答案 0 :(得分:1)

此NPE是由null Context传递给辅助构造函数引起的。

您在此处传递上下文:

ThemeData td=new ThemeData(getActivity())

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