【问题标题】:Android trouble getting all rows dataAndroid无法获取所有行数据
【发布时间】:2012-11-07 06:44:22
【问题描述】:

我无法从 sql 获取所有行数据。

DatabaseHandler.java

public HashMap<String, String> getChannelDetails(){
    HashMap<String,String> channels = new HashMap<String,String>();
    String selectQuery = "SELECT  * FROM " + TABLE_CHANNEL;

    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);
    // looping through all rows and adding to list
    if (cursor.moveToFirst()) {
        do {
            channels.put("title", cursor.getString(1));
            channels.put("url", cursor.getString(2));
            channels.put("create_at", cursor.getString(3));
        } while (cursor.moveToNext());
        Log.d("SELECT", channels.toString());
        Log.d("Count", Integer.toString(cursor.getCount()));
    }

    cursor.close();
    db.close();
    // return channels
    return channels;
}

Showresult.java

for(int i = 0; i < 13; i++){
         HashMap<String, String> allchannel = db.getChannelDetails(); 
         String id = allchannel.get("id");
         String title = allchannel.get("title");
         String url = allchannel.get("url");
         String date = allchannel.get("created_at");
         titles[i] = title;
         Toast.makeText(context,titles[i]+" "+url+" "+ date, Toast.LENGTH_SHORT).show();
         }

cursor.getCount() 有 13 个,但输出只重复显示最后一行数据。

【问题讨论】:

    标签: java android sqlite loops hashmap


    【解决方案1】:

    将您的方法更改为以下:

    public ArrayList<HashMap<String, String>> getChannelDetails(){
    ArrayList<HashMap<String, String>> list=new ArrayList<HashMap<String, String>>();
        String selectQuery = "SELECT  * FROM " + TABLE_CHANNEL;
    
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);
        // looping through all rows and adding to list
        if (cursor.moveToFirst()) {
            do {
                HashMap<String,String> channels = new HashMap<String,String>();
    
                channels.put("title", cursor.getString(1));
                channels.put("url", cursor.getString(2));
                channels.put("create_at", cursor.getString(3));
                list.add(channels);
            } while (cursor.moveToNext());
            Log.d("Count", Integer.toString(cursor.getCount()));
        }
    
        cursor.close();
        db.close();
        // return channels
        return list;
    }
    

    现在使用这个列表来遍历结果。

    【讨论】:

    • 只是提醒(给@Eric)这不是一个好的工作方法。您最好创建一个类(Channel)并返回 ArrayList,在所有字段都固定的情况下,以一种看起来像 Javascript 属性列表的方式使用 HashMap 是没有意义的。
    • 一个关于arraylist的问题。 for (HashMap map : allchannel){ for (Entry mapEntry : map.entrySet()) { String value = mapEntry.getValue(); }} 现在它显示所有值,我如何获得特定的键值??
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-30
    • 2018-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多