0

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

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

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

           }

       }

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

4

2 回答 2

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

       }
于 2013-06-16T12:53:29.497 回答
0

您的代码将仅返回数据库中的最后一个条目(无论您是否遍历游标,它都会返回最后一个结果)。您可以改为使用 a 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);
于 2013-06-16T12:42:30.073 回答