получить значение из базы данных, чтобы установить флажок - PullRequest
1 голос
/ 04 марта 2011

Я хочу установить флажок, который получает курсор от getLang (), если KEY_ACT of language = 1, тогда флажок true

Это мой 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();

поэтому, когда установлен флажок, английский должен отображать выбор, потому что 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 ]

1 голос
/ 04 марта 2011

А как насчет использования "1" вместо 1 в сравнении .equals()?

Если 1 равно true и 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();
0 голосов
/ 04 марта 2011

Вы бы лучше хранить KEY_ACT как логическое значение или int, не так ли? Таким образом, он работает более плавно с флажком.

Вы уверены, что вызываете c.moveToNext () или c.moveToFirst (), чтобы получить записи в курсоре?

Не забудьте также вызвать c.close () после окончания работы с курсором, чтобы сохранить приложение в порядке.

...