簡體   English   中英

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

[英]at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:188)

這是我的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 Exception

               List<ThemeElements> elems = te.getthemecards();   
                System.out.println("what is elemes"+elems);

我通過將上下文作為ThemeData td=new ThemeData(getActivity());傳遞來ThemeData td=new ThemeData(getActivity()); themeDataThemeData 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)

此NPE是通過將Contextnull傳遞給輔助構造函數引起的。

您在此處傳遞上下文:

ThemeData td=new ThemeData(getActivity())

您可能在將片段附加到活動之前就初始化ThemeData太早了。 將初始化推遲到片段生命周期的下一階段,即on...()生命周期回調之一。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM