2013-06-18 2 views
0

В принципе, это не проблема сама по себе, мой код работает до сих пор.Получение неизвестного количества результатов от SQLite db

У меня есть приложение, которое позволяет пользователю войти в систему и в зависимости от его идентификатора в db, он отображает сохраненные заметки. Для этого мнения у меня есть эта часть кода:

title = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1); 
MyDbHandler dbh = new MyDbHandler(this); 

for(int i = 0; i < 999; i++) { 
    content = dbh.getNoteTitle(id, i); //getNoteTitle(int, int) returns String 
    if(content != null && content != "0") 
     title.add(content); 
    else 
     break; 
} 
list.setAdapter(title); 

Как я уже говорил, это работает до сих пор. Вещь - я очень недовольна использованием «перерыва»; «здесь, как я узнал во время образования, это не должно использоваться. Есть ли более плавный способ решения этой проблемы?

Также 'content! = "0"' должно быть '! content.equals ("0") 'обычно, правильно? Но тогда это не работает ... Почему?

ответ

1

Я не уверен, что вы пытаетесь сделать. Прежде всего, вы должны использовать метод «равный» для строк. Условие «content! =« 0 »всегда будет истинным, потому что вы сравниваете 2 разных объекта. Условие«! content.equals ("0") "должен возвращать истинную большую часть времени (когда значение не равно 0), и, вероятно, вы должны использовать отладчик, чтобы точно определить, что такое значение содержимого.

Второй, если вы хотите взять все заметки из базы данных и показать их пользователю, у вас должен быть первый метод в SQLiteOpenHelper, аналогичный (неэффективно опросить базу данных для каждого элемента, а также разделение проблем):

public ArrayList<String> getNotesList (int userID){ 
    SQLiteDatabase db = getWritableDatabase(); 
    Cursor c = db.query(TABLE_NAME, new String[] {MyDbHandler.COLUMN_NOTE_TITLE}, MyDbHandler.userID + "=" + userID,null, null, null, null); 
    ArrayList<String> list = null; 
     String noteTitle; 
     if (c != null && c.moveToFirst()) 
     { 
        list = new ArrayList<String>(c.getCount()); 
      for (int i = 0; i < c.getCount(); i++) 
      { 
       noteTitle = c.getString(c.getColumnIndex(MyDbHandler.COLUMN_SESSION_PATH)); 
       list.add(noteTitle); 
       c.moveToNext(); 
      } 
     } 
     c.close(); 
     db.close(); 
     return list; 

Я думаю, что вы не должны сохранять заметки, которые вы не хотите использовать (например, null или «0»), поэтому вместо проверки здесь я должен проверить метод addNote. Для инициализации списка у вас есть:

MyDbHandler dbh = new MyDbHandler(this); 
ArrayList listData = dbh.getNotesList(id) 
if (listData != null && listData.length != 0){ 
    title = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list); 
    listData.setAdapter(title); 
} 

Я не тестировал код, но надеюсь, он вам поможет. Удачи!

+0

Спасибо! В основном это была (простая) идея использования этих двух, которых мне не хватало. Тогда все остальное было от себя. /// list = new ArrayList (c.getCount()); /// for (int i = 0; i

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