从数据库中获取值以设置复选框

时间:2011-03-04 17:51:13

标签: android database checkbox cursor

如果KEY_ACT为language = 1则复选框为true,我想构建从getLang()获取光标的复选框

这是我的getLang()

public Cursor getLang() {
    return db.query(LANGS_TABLE, new String[] { 
            KEY_LANG_ID,
            KEY_LANG,
            KEY_ACT},
            null, null, null, null, null, null);
}

我有这样的数据库

         ContentValues initialValues3 = new ContentValues();
        initialValues3.put(KEY_LANG, "English");
        initialValues3.put(KEY_ACT, "1");
        db.insert(LANGS_TABLE, null, initialValues3);
        initialValues3.clear();
        initialValues3.put(KEY_LANG, "French");
        initialValues3.put(KEY_ACT, "0");
        db.insert(LANGS_TABLE, null, initialValues3);
        initialValues3.clear();
        initialValues3.put(KEY_LANG, "German");
        initialValues3.put(KEY_ACT, "0");
        db.insert(LANGS_TABLE, null, initialValues3);
        initialValues3.clear();
        initialValues3.put(KEY_LANG, "Italy");
        initialValues3.put(KEY_ACT, "0");
        db.insert(LANGS_TABLE, null, initialValues3);
        initialValues3.clear();
        initialValues3.put(KEY_LANG, "Spanish");
        initialValues3.put(KEY_ACT, "0");
        db.insert(LANGS_TABLE, null, initialValues3);
        initialValues3.clear();

所以当显示复选框时,英文必须显示select,因为KEY_ACT = 1

这是我的复选框代码

protected void printSelectedLanguage(){
    int i = 0;
    db.open();
    Cursor c = db.getLang();
    for(i = 0; i < _options.length-1; i++ )
    {
        if (c.getString(c.getColumnIndex(DBAdapter.KEY_ACT)).equals(1)){
            _selections[i]=true;
        }
        if ( _selections[i]==true ) {
            db.setLang_Act(i+1, 1);
        }else if ( _selections[i]==false ){
            db.setLang_Act(i+1, 0);
        }
    }

但它没有显示数据库中的KEY_ACT

我该怎么办?

///编辑以显示有关“警告”对话框中的复选框的更多信息

protected Dialog onCreateDialog( int id ) 
{
    return 
    new AlertDialog.Builder( this )
        .setTitle( "Select language" )
        .setMultiChoiceItems( _options, _selections, new DialogSelectionClickHandler() )
        .setPositiveButton( "OK", new DialogButtonClickHandler() )
        .create();}
  public class DialogSelectionClickHandler implements DialogInterface.OnMultiChoiceClickListener
{
    @Override
    public void onClick( DialogInterface dialog, int clicked, boolean selected )
    {
        Log.i( "MEooooo", _options[ clicked ] + " selected: " + selected );

    }
}

public class DialogButtonClickHandler implements DialogInterface.OnClickListener
{
    @Override
    public void onClick( DialogInterface dialog, int clicked )

    {
        switch( clicked )
        {
            case DialogInterface.BUTTON_POSITIVE:


                printSelectedLanguage();
                break;
            case DialogInterface.BUTTON_NEGATIVE:

                printSelectedLanguage();
                break;
        }
    }
}

2 个答案:

答案 0 :(得分:1)

如何在"1"比较中使用1代替.equals()呢?

如果1为真且0为false,您还可以将该字段检索为int:

if (c.getInt(c.getColumnIndex(DBAdapter.KEY_ACT)) == 1) {

编辑 - 您可能希望传递实际光标,因为您的数据库设置与预期的setMultipleChoiceItems()设置相匹配:

new AlertDialog.Builder( this )
    .setTitle( "Select language" )
    .setMultiChoiceItems(cursor, KEY_ACT, KEY_LANG, new DialogSelectionClickHandler())
    .setPositiveButton( "OK", new DialogButtonClickHandler() )
    .create();

答案 1 :(得分:0)

你最好将KEY_ACT存储为boolean或int不是吗?这样,它可以通过复选框更加流畅地工作。

您是否确保调用c.moveToNext()或c.moveToFirst()来获取游标中的记录?

在完成光标操作后,不要忘记调用c.close(),以保持应用程序整洁。