2009-08-30 3 views

答えて

54

Cursorのすべての要素を確認し、ArrayListに1つずつ追加します。

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)); 
} 

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

+0

こんにちは、私がしたいことは、私のリストに "拳の文字"を表示することです。カーソルからすべてのデータを取得した後、文字列[]配列に変換して「最初の文字」を取得する方法がわかりません。次のような文字になります。firstLetter = mString [firstVisibleItem] .charAt(0); – Dennie

+8

Friends:上記のforループは完全に正しいものではありません(条件とインクリメントがスワップされます)。 'for(mCursor.moveToFirst();!mCursor.isAfterLast(); mCursor.moveToNext()){} ' –

+2

このタイプのループは読みにくいものです。 @PearsonArtPhotoのソリューションは、よりエレガントで読みやすいです。 – WarrenFaith

39

一つの迅速な修正を:forループカーソルの最初の要素をスキップします。 は最初の要素を含めるには、これを使用する:

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(); 
} 
+3

非常に良い点imbrizi。これは、カーソルの要素をループするもっと良い方法です – DonnaLea

+0

2つ以上の列の値を追加する方法は? –

20

@ 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 
} 
+2

カーソルを反復処理する唯一の正しい方法です。他の2つの答えはちょうど....間違っています:| – iTwenty

+1

奇妙なシナリオを除いて、通常はループ外でgetColumnIndexを外部化することができます – rds

3

私は、オブジェクトの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を作り、それがコンストラクタを持っていることを確認してください。