这是我的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)
答案 0 :(得分:1)
此NPE是由null
Context
传递给辅助构造函数引起的。
您在此处传递上下文:
ThemeData td=new ThemeData(getActivity())
您可能在片段附加到活动之前过早地初始化ThemeData
。将初始化推迟到片段生命周期的后期阶段,即on...()
生命周期回调之一。