Как передать данные в базу данных на счетчик - PullRequest
0 голосов
/ 13 октября 2019

Я создаю метод для чтения всей информации в базе данных и просмотра ее через счетчик. Вот код, который я пробовал для этой функции

public Spinner loadArtist(){
        SQLiteDatabase DB = getReadableDatabase();

        String[] projection = {
                ArtistMaster.Artist.ARTIST_NAME};

        Cursor cursor = DB.query(
                ArtistMaster.Artist.TABLE_ARTIST,
                projection,
                null,
                null,
                null,
                null,
                null);

        Spinner itemIds = new ArrayList<>();
        while(cursor.moveToNext()) {
            long itemId = cursor.getLong(
                    cursor.getColumnIndex(ArtistMaster.Artist.ARTIST_NAME));
            itemIds.setAdapter(itemId);
        }
        cursor.close();
        return itemIds;
    }

, но он выдает ошибку в этой строкеSpinner itemIds = new ArrayList<>(); Должен ли я объявить его как список вместо счетчика

Ответы [ 2 ]

0 голосов
/ 14 октября 2019

Я бы предположил, что было бы проще, если бы вы использовали Adpater для Cursor, так как они предназначены для использования с Cursor, и нет необходимости создавать массивы.

SimpleCursorAdapter Это простой, но все же довольно гибкий адаптер для использования с курсорами.

Единственная проблема заключается в том, что адаптеру курсора требуется имя столбца, конкретно _id (BaseColumns._ID разрешается в этом (какиспользуется ниже)).

  1. Сначала укажите следующие переменные-члены (очевидно, имена могут быть такими, какие вы хотите)

: -

Cursor mCursor;
SimpleCursorAdapter mAdapter;
Spinner spinner;
SQLiteDatabase db;
В onCreate Метод действия есть

: -

spinner = this.findViewById(R.id.?????); //
db = ???????? (as per your existing code)
manageSpinner();
Есть метод

: -

private void manageSpinner() {
    mCursor = db.query(
            ArtistMaster.Artist.ARTIST_NAME,
            new String[]{"*","rowid AS " + BaseColumns._ID}, //<<<<<<<< adds _ID column (unless the table is a WITHOUT ROWID table, pretty unlikely)
            null,null,null,null,null
    );
    if (mAdapter == null) {
        mAdapter = new SimpleCursorAdapter(
                this,
                android.R.layout.simple_list_item_1,
                mCursor,
                new String[]{"the_column"}, // column(s) from which to extract data
                new int[]{android.R.id.text1}, // layout views into which the data is placed
                0
        );
        spinner.setAdapter(mAdapter);
        // You want want to do something when an Item in the spinner is clicked (this does nothing as it is)
        spinner.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                //........... do your stuff here
                // notes
                // id will be the id of the row 
                // cursor will be positioned, so you can access data from the cursor if needed
            }
        });
    } else {
        mAdapter.swapCursor(mCursor);
    }

}
Переопределите действия onResume (обновите счетчик при возврате к действию, поскольку базовые данные могли измениться) и onDestroy (чтобы закрыть курсор), используя

: -

@Override
protected void onDestroy() {
    super.onDestroy();
    mCursor.close();
}

@Override
protected void onResume() {
    super.onResume();
    manageSpinner();
}
0 голосов
/ 13 октября 2019

itemIds следует определить как ArrayList<Long>. A Spinner является элементом пользовательского интерфейса, а ArrayList является структурой данных. Скорее всего, вам потребуется сопоставить данные с вашим пользовательским интерфейсом с помощью какого-либо адаптера, например. ArrayAdapter:

Spinner spinner = ... // findViewById, new Spinner() etc.
ArrayList<Long> itemIds = new ArrayList<>();
//... fill array with artist IDs

spinner.setAdapter(
    new ArrayAdapter(
        this, // Context, Activity etc.,
        android.R.layout.simple_list_item_1, // Spinner TextView item resource ID
        itemIds // Data set. 
));

По умолчанию ArrayAdapter будет вызывать Object#toString() для каждого объекта данных в коллекции.

...