Android SQLite显示Listview中的所有记录

时间:2015-05-31 22:09:38

标签: sqlite loops listview

我整个周末一直都在这,我在我的智慧结束时如何将查询中的所有记录返回到列表视图

以下代码完美无缺

public void DisplayContact(String sitename)
{
final DBAdapter db = new DBAdapter(this);
db.open();  

Cursor c = db.getAsset6(sitename);
int mx=0;
String[] lvdata = new String[c.getCount()-1];
while (c.moveToNext()) {
lvdata[mx]=c.getString(2) + "-" + c.getString(1) + "-" + c.getString(6);
mx++;

}
getActionBar().setTitle("Number of Records = " + mx); 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
        R.layout.rowlayout, R.id.label, lvdata);
setListAdapter(adapter);

}

public Cursor getAsset6(String strname) throws SQLException 
{ 
    Cursor mCursor =
            db.query(true, DATABASE_TABLE,
                     new String[] {KEY_ROWID,KEY_FAULTREF,KEY_WORKNUM,KEY_ORIGNUM,KEY_REPBY,KEY_REPDATTIM,KEY_DESCRIPTION},
                     KEY_REPBY + " LIKE ?",
                     new String[] { "%" + strname + "%" },
                     null, null, null, null); if (mCursor != null) {
        mCursor.moveToFirst();
    }
    return mCursor;                           
}

问题是它没有在查询中添加第一项(即查询中有151条记录,但它只在列表视图中放入150缺少第一条条目)

我确信它与c.moveToFirst()有关;和一个Do语句,但我已经阅读了我在这里可以找到的每篇文章,当我在应用程序中运行查询时,我尝试的任何组合都会崩溃。我正在使用外部数据库运行应用程序,所以我无法看到在eclipse中导致崩溃的原因

你们其中一位SQL大师可以帮我解决它让我疯狂吗

您的帮助表示赞赏

标记

1 个答案:

答案 0 :(得分:0)

我相信解决方案是从你的getAsset6()方法中删除这一行:

mCursor.moveToFirst();

正在发生的是,正在创建光标,然后将其设置为结果集的第一行。然后将while循环定义为:

while (c.moveToNext())

首先评估while循环的条件,以确定是否应运行后面的代码。因此,在开始添加到lvdata []数组之前,此语句会将光标前进到第二行。因此第一行被跳过。通过删除moveToFirst(),您的代码仍然可以正常工作。 while循环中的moveToNext()将光标设置为第一次迭代中的第一行,您将把所有数据都放入数组中。如果光标碰巧为空,则moveToNext()将返回false,并且不会将任何内容添加到数组中。