Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android SQLite在Listview中显示所有记录_Sqlite_Loops_Listview - Fatal编程技术网

Android SQLite在Listview中显示所有记录

Android SQLite在Listview中显示所有记录,sqlite,loops,listview,Sqlite,Loops,Listview,我整个周末都在关注这个问题,对于如何将查询中的所有记录返回到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]

我整个周末都在关注这个问题,对于如何将查询中的所有记录返回到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;                           
}
public void DisplayContact(字符串sitename)
{
最终DBAdapter db=新的DBAdapter(本);
db.open();
光标c=db.getAsset6(站点名称);
int mx=0;
String[]lvdata=新字符串[c.getCount()-1];
while(c.moveToNext()){
lvdata[mx]=c.getString(2)+“-”+c.getString(1)+“-”+c.getString(6);
mx++;
}
getActionBar().setTitle(“记录数=”+mx);
ArrayAdapter=新的ArrayAdapter(此,
R.layout.rowlayout、R.id.label、lvdata);
setListAdapter(适配器);
}
公共游标getAsset6(字符串strname)引发SQLException
{ 
光标mCursor=
db.query(true,数据库表,
新字符串[]{KEY_ROWID,KEY_FAULTREF,KEY_WORKNUM,KEY_ORIGNUM,KEY_REPBY,KEY_REPDATTIM,KEY_DESCRIPTION},
按键_REPBY+“喜欢吗?”,
新字符串[]{“%”+strname+“%”},
null,null,null,null);如果(mCursor!=null){
mCursor.moveToFirst();
}
返回mCursor;
}
问题是它没有在查询中添加第一项(即查询中有151条记录,但它只在listview中放置了150条缺少第一项的记录)

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

你们当中有谁能帮我摆脱这让我发疯的困境吗

谢谢你的帮助


Mark

我认为解决方案是从getAsset6()方法中删除这一行:

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

while (c.moveToNext())

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

嗨,奈杰尔,如果我删除了该行,则应用程序会崩溃,如果该行保留在该行中,则除了不显示第一条记录外,运行正常。我只是不知道我哪里出错了。你能把你在logcat输出中得到的错误添加到你的问题中吗?对不起,奈杰尔,我希望我知道怎么做。该应用程序正在我的设备上运行,因为它使用sd卡上的数据库。你知道关于如何操作的好教程吗?好的,奈杰尔,我学会了如何使用eclipse连接我的手机。当我拔下线路时,它会崩溃“ArrayIndexOutofBoundsException:长度=54;指数=54;在活动3中。活动3中的主代码不是数据库帮助中的Asset6,您将lvdata[]定义为包含c.getCount()-1元素。试着放下-1。现在您已经获得了所有行,我认为您的数组太小了1个元素。
while (c.moveToNext())