Android无法获取所有行数据

问题描述:

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

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个,但只输出显示最后一行重复数据。

你的方法更改为以下几点:

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; 
} 

现在使用这个列表通过的结果进行迭代。

+2

只是提醒(对@Eric)这不是一个好的工作方法。你最好创建一个类(Channel)并返回ArrayList ,当所有的字段都被修复时,没有必要以一种看起来像Javascript属性列表的方式来使用HashMap。 – xandy

+0

关于数组列表的问题。 为(HashMap中图:allchannel){ 为(条目 mapEntry:map.entrySet()) \t \t \t { \t \t \t字符串值= mapEntry.getValue(); }} 现在它显示所有的值,我如何获得特定的键值? – Eric

+0

通过http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Map.Entry.html#getKey%28%29 – jeet