Java 从SQLite检索数据并将其显示到ListView中

Java 从SQLite检索数据并将其显示到ListView中,java,android,sqlite,android-listview,simplecursoradapter,Java,Android,Sqlite,Android Listview,Simplecursoradapter,我对此代码有问题: SimpleCursorAdapter adapter; adapter = new SimpleCursorAdapter(context, R.layout.activity_view_medication, cursor, from, toViewMed) 当我运行我的项目时,logcat显示: java.lang.IllegalArgumentException: column '_id' does not exist 代码: 游标适配器需要一个_i

我对此代码有问题:

SimpleCursorAdapter adapter;
       adapter = new SimpleCursorAdapter(context, R.layout.activity_view_medication, cursor, from, toViewMed)
当我运行我的项目时,logcat显示:

java.lang.IllegalArgumentException: column '_id' does not exist
代码:

游标适配器需要一个_id列,因为它们依赖于它。 快速修复:添加到您的查询,rowID作为_id。。。显然不是点

rowID是一个特殊的自动字段,它实际上是一个缺少的_id字段的替换

根据:

在SQLite中,表行通常具有64位带符号整数ROWID,该ROWID在同一表中的所有行中都是唯一的。没有ROWID的表是例外

可以使用特殊列名ROWID、ROWID或OID之一访问SQLite表的ROWID。除非您声明一个普通表列使用这些特殊名称之一,否则该名称的使用将引用声明的列,而不是内部ROWID

如果表包含INTEGER主键类型的列,则该列将成为ROWID的别名。然后,您可以使用四个不同的名称中的任意一个来访问ROWID,即上面描述的三个原始名称或指定给INTEGER主键列的名称。所有这些名称都是彼此的别名,在任何上下文中都同样适用


您还需要签入数据库

试试这个

例如:

MyDatabase.java


该错误表示您的表没有名为_idI的列。我已将该代码更改为:*public Cursor getAllData{SQLiteDatabase db=this.getWritableDatabase;Cursor Cursor=db.rawQueryselect rowid\u id,from TABLE\u NAME,null;**return Cursor;}否。它应该是:…db.rawQueryselect rowid\u id,from+TABLE\u NAME,null;
@Override
protected void onCreate (Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    context=this;

    // Get ListView object from xml
    lv = (ListView)findViewById(R.id.list);

    myDb = new DatabaseHelper(this);

    Create_Alarm();
    populateListView();
}

public void populateListView(){

    myDb.getAllData();
    Cursor cursor = myDb.getAllData();

    String[] from = new String[] {myDb.COL_2, myDb.COL_3 };
    int[] toViewMed = new int[] {R.id.txtName, R.id.txtQuantity};

    SimpleCursorAdapter adapter;
    adapter = new SimpleCursorAdapter(context, R.layout.activity_view_medication, cursor, from, toViewMed) {

        @Override
        public View newView(Context context, Cursor cursor, ViewGroup parent) {
            //return null;
            return LayoutInflater.from(context).inflate(R.layout.activity_view_medication, parent, false);
        }

        @Override
        public void bindView(View view, Context context, Cursor cursor) {

            // Find fields to populate in inflated template
            TextView medicine = (TextView) view.findViewById(R.id.txtName);
            TextView quantity= (TextView) view.findViewById(R.id.txtQuantity);

            // Extract properties from cursor
            String  from = cursor.getString(cursor.getColumnIndexOrThrow("from"));
            int toViewMed = cursor.getInt(cursor.getColumnIndexOrThrow("toViewMed"));

            // Populate fields with extracted properties
            medicine.setText(from);
            quantity.setText(String.valueOf(toViewMed));

        }
    };

    // Assign adapter to ListView
    lv.setAdapter(adapter);
}
public class MyDatabaseHelper extends SQLiteOpenHelper {

    public static final rowid_id="_id";
       ......

    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table " + TABLE_NAME + " ( " + rowid_id + " INTEGER PRIMARY KEY ,Name TEXT,Weather TEXT, Date DATETIME, Status Text, TimeIn_Info DATE TIME, TimeOut_Info DATETIME)");