كيف يمكنني إنشاء صفيف قائمة مع البيانات المؤشر في الروبوت
-
20-09-2019 - |
سؤال
وكيف يمكنني إنشاء صفيف قائمة (قائمة العرض الأولى الأبجدية عند التمرير) مع البيانات المؤشر؟
المحلول
والعودة من خلال كل عنصر في 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
مع مؤشر عمود من القيمة التي تريد الحصول عليها من المؤشر.)
نصائح أخرى
واحد تصحيح سريع: الحلقة 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();
}
وحتى أفضل من @ imbrizi والجواب هو:
ArrayList<String> mArrayList = new ArrayList<String>();
while(mCursor.moveToNext()) {
mArrayList.add(mCursor.getString(mCursor.getColumnIndex(dbAdapter.KEY_NAME))); //add the item
}
وmoveToNext()
سيعود كاذبة إذا لم يكن هناك أي شيء اليسار، ولذلك فإن هذا يقلل من 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 للقطع:
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();
ومجرد جعل MyObject
POJO والتأكد من أن لديها منشئ.
في 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"))
}