كيف يمكنني إنشاء صفيف قائمة مع البيانات المؤشر في الروبوت

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 مع مؤشر عمود من القيمة التي تريد الحصول عليها من المؤشر.)

نصائح أخرى

واحد تصحيح سريع: الحلقة 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"))
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top