2012-05-27 46 views
0

我有2個活動,第一個是DataBase助手,第二個是主要活動。根據數據庫中的表設置單選按鈕

現在,我試圖根據KEY__NAME列中的表DATABASE_TABLE_SETTINGS上的名稱設置單選按鈕。

我試着在主要活動上設置下面的代碼,並得到一個遊標,它檢查是否!c.isAfterLast,如果這是真的,我希望它設置新的單選按鈕,其ID爲KEY_ROW_b_ID,名稱爲KEY_b_NAME 。

共進午餐之後,我得到這個錯誤:

05-27 19:33:44.055: E/AndroidRuntime(2189): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.tamar.efrat/com.tamar.efrat.Tamar_appActivity}: java.lang.NullPointerException 

的在主要活動循環是:

DatBas dbc = new DatBas(Tamar_appActivity.this); 
    dbc.open(); 
    SQLiteDatabase tdb = null; 
    String[] columns = new String[] { DatBas.KEY_ROW_B_ID, DatBas.KEY_B_NAME }; 
    Cursor c = tdb.query(DatBas.DATABASE_TABLE_SETTINGS, columns, null, null, null, null, 
      null); 

    int iRawBId = c.getColumnIndex(DatBas.KEY_ROW_B_ID); 
    int iBName = c.getColumnIndex(DatBas.KEY_B_NAME); 

    for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) { 
     RadioGroup radiogroup = (RadioGroup)  
        findViewById(R.id.bNameSelectGroup); 
     RadioButton rdbtn = new RadioButton(this); 
     rdbtn.setId(iRawBId); 
     rdbtn.setText(iBName); 
     radiogroup.addView(rdbtn); 
    } 
    dbc.close(); 

數據庫助手的代碼:

public class DatBas { 

    public static final String KEY_ROWID = "_id"; 
    public static final String KEY_SHOURS = "start_hour"; 
    public static final String KEY_SMINUTE = "start_minute"; 
    public static final String KEY_SDATE = "start_date"; 
    public static final String KEY_AMOUNT = "amount"; 
    public static final String KEY_SIDE = "side"; 
    public static final String KEY_KIND = "kind"; 

    public static final String KEY_ROW_b_ID = "_id"; 
    public static final String KEY_b_IMAGE_PATH = "uri_b"; 
    public static final String KEY_b_NAME = "b_name"; 
    public static final String KEY_b_GENDER = "b_gender"; 
    public static final String KEY_b_BORN_DATE_YEAR = "b_age_year"; 
    public static final String KEY_b_BORN_DATE_MONTH = "b_age_month"; 
    public static final String KEY_b_BORN_DATE_DAY = "b_age_day"; 

    private static final String DATABASE_NAME = "TamatDB"; 
    private static final String DATABASE_TABLE = "stop_watch_records"; 
    private static final String DATABASE_TABLE_SETTINGS = "settings"; 

    private static final int DATABASE_VERSION = 3 ; 

    private TamarDatabase thdb; 
    private static Context tcontext; 
    private SQLiteDatabase tdb; 

    private static class TamarDatabase extends SQLiteOpenHelper { 

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

     @Override 
     public void onCreate(SQLiteDatabase db) { 
      String ctData = "CREATE TABLE " + DATABASE_TABLE + " (" 
        + KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " 
        + KEY_SHOURS + " TEXT, " + KEY_SMINUTE 
        + " TEXT, " + KEY_SDATE + " TEXT, " 
        + KEY_AMOUNT + " TEXT, " + KEY_SIDE 
        + " TEXT, " + KEY_KIND + " TEXT);"; 
      db.execSQL(ctData); 

      String ctSettings = "CREATE TABLE " + DATABASE_TABLE_SETTINGS 
        + " (" + KEY_ROW_b_ID 
        + " INTEGER PRIMARY KEY AUTOINCREMENT, " 
        + KEY_b_IMAGE_PATH + " TEXT, " + KEY_b_NAME 
        + " TEXT, " + KEY_b_GENDER + " TEXT, " 
        + KEY_b_BORN_DATE_YEAR + " TEXT, " 
        + KEY_b_BORN_DATE_MONTH + " TEXT, " 
        + KEY_b_BORN_DATE_DAY + " TEXT);"; 
      db.execSQL(ctSettings); 

     } 

     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
      db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE); 
      db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE_SETTINGS); 
      onCreate(db); 
     } 
    } 

    public DatBas(Context c) { 
     tcontext = c; 
    } 

    public DatBas open() throws SQLiteException { 
     thdb = new TamarDatabase(tcontext); 
     tdb = thdb.getWritableDatabase(); 
     return this; 
    } 

    public SQLiteDatabase getReadableDatabase() throws SQLiteException { 
     thdb = new TamarDatabase(tcontext); 
     tdb = thdb.getReadableDatabase(); 
     return tdb; 
    } 


    public void close() { 
     tdb.close(); 
    } 

    public long createEntry(String sh, String sm, String sd, String at, 
      String tside, String tkind) { 
     ContentValues cv = new ContentValues(); 
     cv.put(KEY_SHOURS, sh); 
     cv.put(KEY_SMINUTE, sm); 
     cv.put(KEY_SDATE, sd); 
     cv.put(KEY_AMOUNT, at); 
     cv.put(KEY_SIDE, tside); 
     cv.put(KEY_SIDE, tkind); 

     return tdb.insert(DATABASE_TABLE, null, cv); 
    } 

    public long createEntrySettings(String pt, String bn, String bg, 
      String bbdy, String bbdm, String bbdd) { 
     ContentValues cv2 = new ContentValues(); 
     cv2.put(KEY_b_IMAGE_PATH, pt); 
     cv2.put(KEY_b_NAME, bn); 
     cv2.put(KEY_b_GENDER, bg); 
     cv2.put(KEY_b_BORN_DATE_YEAR, bbdy); 
     cv2.put(KEY_b_BORN_DATE_MONTH, bbdm); 
     cv2.put(KEY_b_BORN_DATE_DAY, bbdd); 

     return tdb.insert(DATABASE_TABLE_SETTINGS, null, cv2); 
    } 

    public String getData() { 
     String[] columns = new String[] { KEY_ROWID, KEY_SHOURS, KEY_SMINUTE, 
       KEY_SDATE, KEY_AMOUNT, KEY_SIDE, KEY_KIND }; 
     Cursor c = tdb.query(DATABASE_TABLE, columns, null, null, null, null, 
       null); 
     String results = ""; 

     int iRaw = c.getColumnIndex(KEY_ROWID); 
     int iShours = c.getColumnIndex(KEY_SHOURS); 
     int iSminute = c.getColumnIndex(KEY_SMINUTE); 
     int iDate = c.getColumnIndex(KEY_SDATE); 
     int iAmount = c.getColumnIndex(KEY_AMOUNT); 
     int iSide = c.getColumnIndex(KEY_SIDE); 
     int iKind = c.getColumnIndex(KEY_KIND); 

     for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) { 
      results = results + "the id is " + c.getString(iRaw) 
        + " the sart hour is " + " " + c.getString(iShours) 
        + " the start minute is " + " " + c.getString(iSminute) 
        + " the start date is " + " " + c.getString(iDate) 
        + " the amount is " + " " + c.getString(iAmount) 
        + " the side is " + " " + c.getString(iSide) 
        + " the kind is " + " " + c.getString(iKind) + "\n"; 
     } 
     return results; 
    } 

    public String getDataSettings() { 
     String[] columns = new String[] { KEY_ROW_b_ID, KEY_b_IMAGE_PATH, 
       KEY_b_NAME, KEY_b_GENDER, KEY_b_BORN_DATE_YEAR, 
       KEY_b_BORN_DATE_MONTH, KEY_b_BORN_DATE_DAY }; 
     Cursor c = tdb.query(DATABASE_TABLE_SETTINGS, columns, null, null, 
       null, null, null); 
     String results = ""; 

     int iRawbId = c.getColumnIndex(KEY_ROW_b_ID); 
     int iBIPath = c.getColumnIndex(KEY_b_IMAGE_PATH); 
     int iBName = c.getColumnIndex(KEY_b_NAME); 
     int iGender = c.getColumnIndex(KEY_b_GENDER); 
     int iBBDateYear = c.getColumnIndex(KEY_b_BORN_DATE_YEAR); 
     int iBBDateMonth = c.getColumnIndex(KEY_b_BORN_DATE_MONTH); 
     int iBBDateDay = c.getColumnIndex(KEY_b_BORN_DATE_DAY); 

     for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) { 
      results = results + " id " + " " + c.getString(iRawbId) 
        + " path " + " " + c.getString(iBIPath) 
        + " name " + " " + c.getString(iBName) 
        + " gender " + " " + c.getString(iGender) 
        + " year " + " " + c.getString(iBBDateYear) 
        + " month " + " " + c.getString(iBBDateMonth) 
        + " day " + " " + c.getString(iBBDateDay) + "\n"; 
     } 
     return results; 
    } 

    public String getDataSettingsbName() { 
     String[] columns = new String[] { KEY_ROW_b_ID, KEY_b_NAME }; 
     Cursor c = tdb.query(DATABASE_TABLE_SETTINGS, columns, null, null, 
       null, null, null); 
     String results = ""; 

     int iRawbId = c.getColumnIndex(KEY_ROW_b_ID); 
     int iBName = c.getColumnIndex(KEY_b_NAME); 

     for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) { 
      results = c.getString(iRawbId)+ c.getString(iBName)+ "\n"; 
     } 
     return results; 
    } 

    public DatBas delete() { 
     tdb.delete(DATABASE_TABLE, null, null); 
     tdb.delete(DATABASE_TABLE_SETTINGS, null, null); 
     return null; 
    } 

} 
+0

放滿logcat – waqaslam

回答

0

你的Sqlitedatabase實例是null所以它拋出一個NullPointerException,當你嘗試做就可以查詢:

SQLiteDatabase tdb = null; // this is null so when you query the database it will throw an exception 
String[] columns = new String[] { DatBas.KEY_ROW_B_ID, DatBas.KEY_B_NAME }; 
Cursor c = tdb.query(DatBas.DATABASE_TABLE_SETTINGS, columns, null, null, null, null, 
      null); 

而是得到有效SQLiteDatabase參考:

SQLiteDatabase tdb = dbc.getDatabase(); 
String[] columns = new String[] { DatBas.KEY_ROW_B_ID, DatBas.KEY_B_NAME }; 
Cursor c = tdb.query(DatBas.DATABASE_TABLE_SETTINGS, columns, null, null, null, null, 
      null); 

其中getDatabase()就是這樣在你DatBas類中的方法:

public SQliteDatabase getDatabase() { 
    return tdb; 
} 

另外,從DatBas類中刪除方法getReadableDatabase()

相關問題