【问题标题】:How to Initialize Array inside while loop如何在while循环中初始化数组
【发布时间】:2015-11-25 00:04:47
【问题描述】:

我一直在努力尝试在 while 循环中使用数组。问题是我对android开发很陌生,所以我不知道该怎么做。我见过类似的问题,但大多数/全部都不适合我的场景。下面的代码确实有效,但是我为 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;
}

【问题讨论】:

    标签: android arrays sqlite


    【解决方案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;
    }
    

    您不应该在这里尝试使用原始数组,因为它具有固定大小。如果您限制查询中的行数,则可以使用它,这样您就可以确切地知道需要多少元素,但即便如此,在代码的其他地方使用 Collection 仍然会容易得多。

    由于您似乎是 Android 开发和 Java 的新手,我建议您先熟悉基本的数据结构,例如 Maps、Lists 和 Sets,然后您可能想要使用 ORM 来避免编写用于与数据库交互的样板代码。

    【讨论】:

    • 感谢您的回答和推荐!我将尝试更改我的代码以支持 List :D
    • 没问题!您仍然可以使用 toArray() 或 toArray(T[]) 方法将 List 转换为数组,但是,正如我所说,使用 List 可能会更好:)
    • 刚刚修改完我的代码,它运行良好!
    猜你喜欢
    • 2011-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-10
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    • 2016-05-29
    相关资源
    最近更新 更多