どのように私は、Androidでのカーソル・データとリスト配列を作成することができます

StackOverflow https://stackoverflow.com/questions/1354006

質問

どのようにして、カーソル・データとリスト配列(リスト表示まずアルファベットスクロール)を作成することができますか?

役に立ちましたか?

解決

Cursor内のすべての要素を通って移動して、ArrayListに一つずつを追加します。

ArrayList<WhateverTypeYouWant> mArrayList = new ArrayList<WhateverTypeYouWant>();
for(mCursor.moveToFirst(); !mCursor.isAfterLast(); mCursor.moveToNext()) {
    // The Cursor is now set to the right position
    mArrayList.add(mCursor.getWhateverTypeYouWant(WHATEVER_COLUMN_INDEX_YOU_WANT));
}

(あなたがカーソルから取得したい値の列インデックスとのWhateverTypeYouWant、およびArrayListを作りたいどんなタイプのWHATEVER_COLUMN_INDEX_YOU_WANTを交換してください。)

他のヒント

一つクイック補正:ループの上記カーソルの最初の要素をスキップします。 最初の要素を含めるには、これを使用します:

ArrayList<String> mArrayList = new ArrayList<String>();
mCursor.moveToFirst();
while(!mCursor.isAfterLast()) {
     mArrayList.add(mCursor.getString(mCursor.getColumnIndex(dbAdapter.KEY_NAME))); //add the item
     mCursor.moveToNext();
}

@ imbriziの答えよりも優れ、この次のとおりです。

ArrayList<String> mArrayList = new ArrayList<String>();
while(mCursor.moveToNext()) {
     mArrayList.add(mCursor.getString(mCursor.getColumnIndex(dbAdapter.KEY_NAME))); //add the item
}

は何も残っていない場合moveToNext()はfalseを返しますので、これは少数でSLOCを削減し、参照しやすくなります。

さらに良いことに、ループの外に列インデックスを取得することです。

ArrayList<String> mArrayList = new ArrayList<String>();
int columnIndex=mCursor.getColumnIndex(dbAdapter.KEY_NAME)
while(mCursor.moveToNext()) {
     mArrayList.add(mCursor.getString(columnIndex)); //add the item
}
私は、オブジェクトのArrayListのを望んでいたので、

この1は私のために本当によく働います:

List<MyObject> myList = new ArrayList<String>();
Cursor c = ...

while(c.moveToNext()) {
    myList.add(new MyObject(cursor.getInt(cursor.getColumnIndex("_id")), cursor.getString(cursor.getColumnIndex("column1")), cursor.getInt(cursor.getColumnIndex("column2")));        
}
c.close();

ただ、POJOのMyObjectを作り、それがコンストラクタを持っていることを確認します。

Kotlinでは、この拡張機能を使用することができます

fun <T> Cursor.toList(block: (Cursor) -> T) : List<T> {
    return mutableListOf<T>().also { list ->
        if (moveToFirst()) {
            do {
                list.add(block.invoke(this))
            } while (moveToNext())
        }
    }
}

と、それを使用します:

val listOfIds = cursor.toList { 
    // create item from cursor. For example get id:
    it.getLong(it.getColumnIndex("_id"))
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top