English 中文(简体)
根据数据库中的表设置单选按钮
原标题:Set radio buttons based on table in Database

我有两个活动,第一个是数据库助手,第二个是主活动。

现在,我正试图根据表DATABASE_table_SETTINGS中KEY_b_name列的名称设置单选按钮。

我试图在主活动上设置以下代码,并获得一个光标来检查是否!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

主活动中的for循环是:

    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) + "
";
        }
        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) + "
";
        }
        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)+ "
";
        }
        return results;
    }

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

}
最佳回答

你的Sqlitedatabase实例是nullNullPointerException:

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

请获取对有效SQLite数据库的引用:

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()

问题回答

暂无回答




相关问题
Spring Properties File

Hi have this j2ee web application developed using spring framework. I have a problem with rendering mnessages in nihongo characters from the properties file. I tried converting the file to ascii using ...

Logging a global ID in multiple components

I have a system which contains multiple applications connected together using JMS and Spring Integration. Messages get sent along a chain of applications. [App A] -> [App B] -> [App C] We set a ...

Java Library Size

If I m given two Java Libraries in Jar format, 1 having no bells and whistles, and the other having lots of them that will mostly go unused.... my question is: How will the larger, mostly unused ...

How to get the Array Class for a given Class in Java?

I have a Class variable that holds a certain type and I need to get a variable that holds the corresponding array class. The best I could come up with is this: Class arrayOfFooClass = java.lang....

SQLite , Derby vs file system

I m working on a Java desktop application that reads and writes from/to different files. I think a better solution would be to replace the file system by a SQLite database. How hard is it to migrate ...