Chvalov
@Chvalov

Как отобразить нужную строку в Spinner из БД sqlite в Android?

Есть код который загружает из БД список в spinner
private static final String DB_NAME = "ovis_mill.sqlite3";
    //Заданее имена полей БД константами
    private static final String TABLE_NAME = "baudratespinner";
    private static final String BAUDRATE_ID = "_id";
    private static final String BAUDRATE_NAME = "baudrate";
    private static final String BAUDRATE_SELECTED = "selected";
    private SQLiteDatabase database;

    private ArrayList baudrate;

    Spinner BaudrateSpinner;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.general_settings);

        // Находим елементы
        BaudrateSpinner = (Spinner) findViewById(R.id.BaudrateSpinner);

        //Наш ключевой хелпер
        ExternalDbOpenHelper dbOpenHelper = new ExternalDbOpenHelper(this, DB_NAME);
        database = dbOpenHelper.getWritableDatabase();
        //Все, база открыта!

        // Загрузка данных спинера с БД
        loadSpinnerBaudrateData();

        //Используем адаптер и стандартный layout элемент для краткости
        ArrayAdapter<String> BaudratedataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, baudrate);
        BaudrateSpinner.setAdapter(BaudratedataAdapter);
    }

    // Загружаем с БД даныые и заносим их в список
    private void loadSpinnerBaudrateData() {
        baudrate = new ArrayList<String>();
        Cursor baudrateCursor = database.query(TABLE_NAME,
                new String[]{BAUDRATE_ID, BAUDRATE_NAME, BAUDRATE_SELECTED},
                null, null, null, null,
                BAUDRATE_NAME);
        baudrateCursor.moveToFirst();
        if (!baudrateCursor.isAfterLast()) {
            do {
                String name = baudrateCursor.getString(1);
                baudrate.add(name);
            } while (baudrateCursor.moveToNext());
        }
        baudrateCursor.close();
        database.close();   // Закрываем БД
    }

Бд выглядит вод так:
0d35b582c2b841bfa1445adcbbb31f01.png
Как мне отображать спиннер в которой выбрана та строка которой selected равно 1 ?
  • Вопрос задан
  • 1573 просмотра
Решения вопроса 1
LeEnot
@LeEnot
Енот-андроид
Даже не знаю, как вам ответить - в вашем коде очень много проблем, ни одно решение нормально не вписывается. Допустим, можно так:
private String loadSpinnerBaudrateData() {
        String selected;
        baudrate = new ArrayList<String>();
        Cursor baudrateCursor = database.query(TABLE_NAME,
                new String[]{BAUDRATE_ID, BAUDRATE_NAME, BAUDRATE_SELECTED},
                null, null, null, null,
                BAUDRATE_NAME);
        baudrateCursor.moveToFirst();
        if (!baudrateCursor.isAfterLast()) {
            do {
                String name = baudrateCursor.getString(1);
                if (baudrateCursor.getInt(baudrateCursor.getColumnIndex( BAUDRATE_SELECTED )) == 1){
                      selected = name;
                }
                baudrate.add(name);
            } while (baudrateCursor.moveToNext());
        }
        baudrateCursor.close();
        database.close();   // Закрываем БД
        return selected;
    }


а потом:
String compareValue = loadSpinnerBaudrateData();
int spinnerPosition = BaudratedataAdapter.getPosition(compareValue);
BaudrateSpinner.setSelection(spinnerPosition);

Но вообще это криво и неправильно...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы