如何将数据库中的数据传递给微调器

问题描述 投票:0回答:2

我正在创建一种方法来读取数据库中的所有信息并通过微调器查看它,这是我为此功能尝试的代码

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<>();中给我一个错误我应该将其声明为列表而不是微调框吗

android sqlite android-studio android-sqlite android-sql
2个回答
0
投票
itemIds应定义为ArrayList<Long>Spinner是UI元素,Spinner是数据结构。您很可能需要使用某种适配器将数据映射到UI。一个ArrayList

ArrayList

默认情况下,ArrayAdapter将在集合中的每个数据对象上调用ArrayAdapter

0
投票
我建议,如果使用旨在与游标一起使用的游标Adpater,则生活会更轻松。

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. )); 是,一个简单但仍非常灵活的适配器,可与游标一起使用。

唯一的问题是游标适配器需要一个特定的列名

_ id(ArrayAdapter解析为该列名(如下所述)。

    首先具有以下成员变量(显然,名称可以是您想要的)
  • :-

    Object#toString()

      在活动的
    1. onCreate
  • 方法中有:-

    SimpleCursorAdapter

      具有方法
  • :-

    BaseColumns._ID

      使用]覆盖活动的onResume(返回活动时刷新微调器,因为基础数据可能已更改)和onDestroy(关闭Cursor)方法。
  • :-

    Cursor mCursor; SimpleCursorAdapter mAdapter; Spinner spinner; SQLiteDatabase db;

  • © www.soinside.com 2019 - 2024. All rights reserved.