2015-11-25 3 views
0

Я изо всех сил пытаюсь использовать массив внутри цикла while. Проблема в том, что я очень новичок в разработке Android, поэтому я понятия не имею, как это сделать. Я видел похожие вопросы, но большинство/все они не подходят для моего сценария. Код ниже работает, но im вызывает новый экземпляр articlesData для каждой строки в инструкции while, это заставляет его просто вернуть значение последней строки. Можно ли использовать такой массив, как ArticlesData [], и получить все мои данные в нем? Пожалуйста, помогите :) Вот мой код:Как инициализировать массив внутри цикла

public ArticlesData[] getArticleData(int no) { 


    Log.e("DB STAT", "getArticleData Called"); 

    SQLiteDatabase db = helper.getWritableDatabase(); 

    String[] columns = { ArticlesHelper.ID, ArticlesHelper.TITLE, ArticlesHelper.IMAGEURL }; 

    Cursor cursor = db.query(ArticlesHelper.TABLE_NAME, 
      columns, 
      ArticlesHelper.DATENUMBER+" < '"+Integer.toString(no)+"'", null, null, null, ArticlesHelper.DATENUMBER+" DESC", "20"); 


    while (cursor.moveToNext()) { 


     int id = cursor.getInt(0); 
     Log.e("DB STAT", "Article Id = "+Integer.toString(id)); 

     String title = cursor.getString(1); 
     Log.e("DB STAT", "Article Title = "+title); 

     String url = cursor.getString(2); 

     articlesData = new ArticlesData[] { 
       new ArticlesData(title, Integer.toString(id), url) 
     }; 
    } 

    return articlesData; 
} 

ответ

1

Вы, скорее всего хотите использовать Collection такие как List:

public List<ArticlesData> getArticleData(int no) { 
    Log.e("DB STAT", "getArticleData Called"); 

    SQLiteDatabase db = helper.getWritableDatabase(); 

    String[] columns = { ArticlesHelper.ID, ArticlesHelper.TITLE, ArticlesHelper.IMAGEURL }; 

    Cursor cursor = db.query(ArticlesHelper.TABLE_NAME, 
      columns, 
      ArticlesHelper.DATENUMBER+" < '"+Integer.toString(no)+"'", null, null, null, ArticlesHelper.DATENUMBER+" DESC", "20"); 

    List<ArticlesData> list = new ArrayList<ArticlesData>(); 

    while (cursor.moveToNext()) { 
     int id = cursor.getInt(0); 
     Log.e("DB STAT", "Article Id = "+Integer.toString(id)); 

     String title = cursor.getString(1); 
     Log.e("DB STAT", "Article Title = "+title); 

     String url = cursor.getString(2); 

     list.add(new ArticlesData(title, Integer.toString(id), url)); 
    } 

    return list; 
} 

Вы не должны пытаться использовать необработанный массив здесь, потому что он имеет фиксированный размер. Вы можете использовать его, если ограничить количество строк в запросе, чтобы вы точно знали, сколько элементов вам нужно, но даже тогда было бы намного проще использовать коллекцию в другом месте кода.

Как вы, кажется, новичок в разработке Android и Java Я предлагаю вам сначала познакомиться с базовыми структурами данных, такими как Карты, Списки и наборы, а затем позже вы можете использовать ORM, чтобы избавить вас от боли код шаблона для взаимодействия с базой данных.

+0

Спасибо за ответ и рекомендацию! Я попробую изменить свой код для поддержки Список: D – edwinj

+0

Нет проблем! Вы все равно можете преобразовать массив 'List' в массив с методом' toArray() 'или' toArray (T []) ', но, как я уже сказал, вам, вероятно, будет лучше со списком :) – jeremija

+0

Просто закончил меня код, и он отлично работает! – edwinj

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