2012-05-27 2 views
0

두 개의 활동이 있습니다. 첫 번째 활동은 DataBase 도우미이고 두 번째 활동은 기본 활동입니다.데이터베이스의 테이블을 기반으로 라디오 버튼을 설정하십시오.

이제 열 KEY_b_NAME의 DATABASE_TABLE_SETTINGS 테이블에있는 이름을 기반으로 라디오 버튼을 설정하려고합니다.

주 활동에 다음 코드를 설정하고! c.isAfterLast를 확인하는 커서를 얻고 이것이 맞는 경우 KEY_ROW_b_ID의 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

put full logcat – waqaslam

답변

0

그것을 점심 후에, 나는이 오류

Sqlitedatabase 인스턴스가 null이므로을 던집니다. (210) 당신이 그것을에 대한 쿼리를 수행 할 때 :

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

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에 대한 참조를 가져옵니다

또한 DatBas 클래스에서 getReadableDatabase() 메서드를 제거하십시오.

관련 문제