我一直在努力尝试在while循环中使用数组几个小时。问题是我对android开发很新,所以我不知道如何做到这一点。我见过类似的问题,但大多数/所有问题都不符合我的情况。下面的代码确实有效,但我为while语句中的每一行调用articlesData的一个新实例,这导致它只返回最后一行的值..有没有办法使用像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;
}
答案 0 :(得分: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来保存编写用于与数据库交互的样板代码的痛苦。