2012-01-29 2 views
0

Я использую код this blog, чтобы иметь перетаскиваемый список. В этом учебнике используется пользовательский DragNDropAdapter , который принимает содержимое как ArrayList.данные от sqlite в ArrayList <String>

В моем спискеActivity я запрашиваю таблицу с возвращенным столбцом name. У нее введено 11 значений. я попытался преобразовать его в ArrayList из String [] со многими способами, такими как:

String[] from = new String[]{DbManager.KEY_NAME}; 
ArrayList<String> content = new ArrayList<String>(); 

for (int i=-1,l=from.length; ++i<l;) { 
      content.add(from[i]); 
      //Log.i("ArrayList", from[i]); 
     } 

или

while(!mShopCatCursor.isAfterLast()){ 
     content.add(mShopCatCursor.getString(0)); 
    } 

, что я получаю список только с именем столбца, name. у вас есть какие-либо идеи

ответ

0
String[] from = new String[]{DbManager.KEY_NAME}; 

Поскольку ваша строка массив имеет только одно значение, которое KEY_NAME.

Что вам нужно сделать, это,

Получить значения из курсора, используя цикл и заполнить его String [] выше.

Cursor userCur = adaptor.getYourData(); 
      if (userCur != null) { 
       String[] strArr = new String[userCur.getCount()]; 
       startManagingCursor(userCur); 
       if (userCur.moveToFirst()) { 
        int count = 0; 
        do { 
         String userName = userCur.getString(1); 
         strArr[count] = userName.trim(); 
         count++; 
        } while (userCur.moveToNext()); 
       } 

ArrayList<String> content = new ArrayList<String>(); 
       for (int i=-1,l=from.length; ++i<l;) {  
       content.add(from[i]);    
     //Log.i("ArrayList", from[i]);   
    }     
} 

Примечание: Я не проверял это в среде IDE, могут быть синтаксические ошибки.

+0

спасибо, что сработало и разумно. я был смущен из многих учебников, в которых использовался приведенный выше синтаксис String [] from = new String [] {DbManager.KEY_NAME}; и импортировать из массива в ListAdapters. у меня есть вопрос, хотя относительно вашего ответа. Почему я должен использовать if (userCur! = Null) в первой строке, а не что-то вроде этого: cursor.moveToFirst(), а затем цикл while. И второй вопрос, почему мне нужна функция обрезки внутри цикла. Большое спасибо в любом случае –

+0

Рад, что это сработало. Пожалуйста, примите в качестве ответа. Насладитесь программированием. – kosa

+0

Это зависит от способа реализации метода getYourData(). Некоторая реализация может быть нулевой, если курсор равен null, cursor.moveToFirst() будет вызывать исключение NullPointerException. Таким образом, всегда лучше делать нулевую проверку. – kosa

1

Вы можете использовать следующий метод, по которому этот метод получит данные из db, а затем вернет вам ArrayList String для этих данных. В вашем случае этот список массивов будет содержать имена.

private ArrayList<String> getArrayList() { 

    ArrayList<String> namesList = null; 

    Cursor cursor = null; 
    try { 
     String query = "";//your query here 
     cursor = db.rawQuery(query,null); 
     if (cursor != null && cursor.moveToFirst()) { 
      namesList = new ArrayList<String>(); 
      do { 
       namesList.add(cursor.getString(0)); 
      } while (cursor.moveToNext()); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
     namesList = null; 
    } finally { 
     if (cursor != null && !cursor.isClosed()) { 
      cursor.deactivate(); 
      cursor.close(); 
      cursor = null; 
     } 
     close(); 
    } 
    return namesList; 
} 


/** 
* Closes the database 
*/ 
private void close() { 
    try { 
     if (db != null && db.isOpen()) { 
      DBHelper.close(); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
+0

Что делает функция close() перед возвратом? –

+0

@NikTsekour, я добавил метод close(), он закрывает соединение с данными. –

Смежные вопросы