繁体   English   中英

如何在Android中的SQLite数据库中以ListView显示数据

[英]How to display data in listview from sqlite database in android

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);
    createDatabase();
    c = db.rawQuery(fetch,null);
    c.moveToFirst();
    while(c.moveToNext()){
        id = c.getString(c.getColumnIndex("_id"));
        name =  c.getString(c.getColumnIndex("name"));
        number = c.getString(c.getColumnIndex("number"));
        //Toast.makeText(Main2Activity.this,id + name,Toast.LENGTH_LONG).show();
        from = new String[]{id, name, number};
        to = new int[]{R.id.label, R.id.numberq, R.id.num};
        adapter = new SimpleCursorAdapter(this,R.layout.layout,c,from,to,0);
    }
    ListView list = (ListView) findViewById(R.id.listview);
    list.setAdapter(adapter);
}
protected void createDatabase(){
    db = openOrCreateDatabase("PersonDB",Context.MODE_PRIVATE,null);
    db.execSQL("CREATE TABLE IF NOT EXISTS Person(_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, name VARCHAR, number VARCHAR);");

}

我试图在列表视图中显示数据,但它显示异常:“ java.lang.IllegalArgumentException:列'_id'不存在”

尝试这个

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        createDatabase();
        c = db.rawQuery(fetch,null);


            String[] from = new String[]{"_id","name","number"};
            int[] to = new int[]{R.id.label, R.id.numberq, R.id.num};
            adapter = new SimpleCursorAdapter(this,R.layout.layout,c,from,to,0);

        ListView list = (ListView) findViewById(R.id.listview);
        list.setAdapter(adapter);
    }
    protected void createDatabase(){
        db = openOrCreateDatabase("PersonDB",Context.MODE_PRIVATE,null);
        db.execSQL("CREATE TABLE IF NOT EXISTS Person(_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, name VARCHAR, number VARCHAR);");

    }

正如其他人指出的那样,将两个id名称都更改为id_id

此外,使用SimpleCursorAdapter无需自己遍历Cursor,适配器可以为您完成此工作。

Cursor cursor = db.rawQuery(...);
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, 
        R.layout.layout, 
        cursor, 
        new String[]{"id", "name", "number"}, 
        new int[]{R.id.label, R.id.numberq, R.id.num});

ListView listView = (ListView) findViewById(R.id.list);
listView.setAdapter(adapter);

将其替换为您的代码:

    protected void createDatabase(){
    db = openOrCreateDatabase("PersonDB",Context.MODE_PRIVATE,null);
    db.execSQL("CREATE TABLE IF NOT EXISTS Person(_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, name VARCHAR, number VARCHAR);");

}

更换

id = c.getString(c.getColumnIndex("_id"));

通过

id = c.getString(c.getColumnIndex("id"));

表中id的列名称是id不是 _id 如该行所示:

db.execSQL("CREATE TABLE IF NOT EXISTS Person(id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, name VARCHAR, number VARCHAR);");

因此,更换

id = c.getString(c.getColumnIndex("_id"));

id = c.getString(c.getColumnIndex("id"));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM