【问题标题】:How to display data in listview from sqlite database in android如何在android中的sqlite数据库中在listview中显示数据
【发布时间】:2017-05-10 10:23:03
【问题描述】:
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'不存在”

【问题讨论】:

    标签: android listview simplecursoradapter


    【解决方案1】:

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

    此外,使用SimpleCursorAdapter,您不需要自己循环游标,适配器会为您完成这项工作。

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

    【讨论】:

      【解决方案2】:

      试试这个

      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”开始,因为我改变了它。两种情况下的例外情况相同。
      • 如果我不使用适配器,即一次一条记录,它可以让我检索数据。
      • 卸载它不起作用。仍然显示相同的异常。
      • 在String[] from...中你必须指定列名而不是列值
      【解决方案3】:

      在你的代码中替换它:

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

      【讨论】:

        【解决方案4】:

        替换

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

        通过

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

        【讨论】:

          【解决方案5】:

          表中id的列名是idnot _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"));
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-08-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-08-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多