使用数据库填充列表视图

时间:2013-06-16 11:22:42

标签: android database android-listview

以下代码是返回一个字符串,用于在显示活动的文本视图中打印条目,但是它通过一次发送所有条目来实现,因此我无法一次处理一个。

这是数据库中用于返回数据的函数。

public String getData() {

        String[] columns = new String[] { KEY_ROWID, KEY_NAME, KEY_DATE,
                KEY_MONTH, KEY_YEAR };

        Cursor c = ourDatabase.query(DATABASE_TABLE, columns, null, null, null,
                null, null);        
            String result = "";

        // int iRow = c.getColumnIndex(KEY_ROWID);  
        int iName = c.getColumnIndex(KEY_NAME);     
        int iDate = c.getColumnIndex(KEY_DATE);     
        int iMonth = c.getColumnIndex(KEY_MONTH);   
        int iYear = c.getColumnIndex(KEY_YEAR);     
        for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) 
            {             
            result = result + " " + c.getString(iName) + "\t\t"
         + c.getString(iDate) + "\t\t" + c.getString(iMonth)+ "\t\t" + c.getString(iYear) + "\n";

        }       
           return result;   
           }

这是在文本视图中打印条目的类:

    public class DBView extends Activity {

        TextView tv;

        @Override   
            protected void onCreate(Bundle savedInstanceState) {   
            super.onCreate(savedInstanceState);         
            setContentView(R.layout.dbview);

            tv = (TextView) findViewById(R.id.SQLinfo); 
            DataBaseClass info = new DataBaseClass(this);       
            info.open();        
            String data = info.getData();       
            info.close();       
            tv.setText(data);

           }

       }

我要做的是根据数据库中的条目数制作列表视图。例如,如果只有一个条目,则只生成一个包含姓名,日期,月份和列表的列表项。年。我尝试使用字符串适配器和列表适配器,但无法使它们工作。

2 个答案:

答案 0 :(得分:1)

这应该有效

public ArrayList<String> getData() {

        String[] columns = new String[] { KEY_ROWID, KEY_NAME, KEY_DATE,
                KEY_MONTH, KEY_YEAR };

        Cursor c = ourDatabase.query(DATABASE_TABLE, columns, null, null, null,
                null, null);        
            String result = "";

        // int iRow = c.getColumnIndex(KEY_ROWID);  
        int iName = c.getColumnIndex(KEY_NAME);     
        int iDate = c.getColumnIndex(KEY_DATE);     
        int iMonth = c.getColumnIndex(KEY_MONTH);   
        int iYear = c.getColumnIndex(KEY_YEAR);   
        ArrayList<String> string_array = new ArrayList<String>();
        for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) 
            {             
            result = c.getString(iName) + "\t\t"
         + c.getString(iDate) + "\t\t" + c.getString(iMonth)+ "\t\t" + c.getString(iYear) + "\n";
         string_array.add(result);

        }       
           return string_array;   
   }

和..

public class DBView extends Activity {

        ListView lv;

        @Override   
            protected void onCreate(Bundle savedInstanceState) {   
            super.onCreate(savedInstanceState);         
            setContentView(R.layout.dbview);

            lv = (ListView) findViewById(R.id.your_listview_id);  
            DataBaseClass info = new DataBaseClass(this);       
            info.open();        
            ArrayList<String> data = info.getData();       
            info.close();       
            ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, data);
            lv.setAdapter(arrayAdapter); 
           }

       }

答案 1 :(得分:0)

您的代码将仅返回数据库中的最后一个条目(无论您是否循环遍历游标,它都将返回最后一个结果)。您可以使用SimpleCursorAdapter(指定列和TextViews来填充列)。查看此示例:

    String[] columns = new String[] { KEY_ROWID, KEY_NAME, KEY_DATE,
            KEY_MONTH, KEY_YEAR };

    Cursor c = ourDatabase.query(DATABASE_TABLE, columns, null, null, null,
            null, null);        
        String result = "";

SimpleCursorAdapter adap=new SimpleCursorAdapter (getApplicationContext, /*create layout with 4 TextViews*/, c, new String[] { KEY_ROWID, KEY_NAME, KEY_DATE,
            KEY_MONTH, KEY_YEAR }, int[] /*ids of the 5 TextViews from the layout part in an int[]*/);

然后创建一个ListView来显示您的数据:

ListView lv=(ListView) findViewById(/*ListView id in your main layout*/);
lv.setAdapter(adap);