【问题标题】:App crashes due to java.lang.IllegalArgumentException: column '_id' does not exist由于 java.lang.IllegalArgumentException 导致应用程序崩溃:列“_id”不存在
【发布时间】:2015-03-05 10:16:58
【问题描述】:

我正在制作一个从数据库填充列表视图的应用程序。但是每当我运行它时,由于java.lang.IllegalArgumentException: column '_id' 不存在而导致应用程序崩溃。首先,我没有字段 ID。 然后我做了一些谷歌搜索,发现我在使用_id时必须添加SimpleCursorAdapter。但问题仍然存在..

 private static final String TABLE_CLASS_LIST = "classlist";

 //class list column names
    private static final String KEY_LIST_ID = "_id";
    private static final String KEY_SUBJECT_NAME_LIST = "subjectname";
    private static final String KEY_CLASS_DIV_LIST = "classdivision";


private static final String CREATE_CLASS_LIST = "CREATE TABLE "
            + TABLE_CLASS_LIST + "(" + KEY_LIST_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + KEY_SUBJECT_NAME_LIST
            + " TEXT," + KEY_CLASS_DIV_LIST + " TEXT)";



public void addClassList(ClassList classList) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put(KEY_SUBJECT_NAME_LIST, classList.getSubject());
    values.put(KEY_CLASS_DIV_LIST, classList.getClassd());
    //  values.put(KEY_CREATED_AT, user.getCreated_at());

    // insert row
    long user_id = db.insert(TABLE_CLASS_LIST, null, values);


}


public Cursor fetchTableList() {
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor mCursor = db.query(TABLE_CLASS_LIST, new String[]{KEY_SUBJECT_NAME_LIST,
                    KEY_CLASS_DIV_LIST},
            null, null, null, null, null);

    if (mCursor != null) {
        mCursor.moveToFirst();
    }
    return mCursor;
}

以上是我的 dbhelper 类(不是全部)。

还有我的活动

public class ClassActivity extends ActionBarActivity {
    ListView classlist;

    String value;
    private SimpleCursorAdapter dataAdapter;
    DatabaseHelper databaseHelper;
    Cursor cursor;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_class); 
    classlist = (ListView) findViewById(R.id.listClass);
    databaseHelper = new DatabaseHelper(this);
    String[] arrayColumns = new String[]{"classdivision", "subjectname"};
    int[] arrayViewIDs = new int[]{R.id.classid, R.id.subject};

    cursor = databaseHelper.fetchTableList();
    dataAdapter = new SimpleCursorAdapter(
            this, R.layout.classlist_single_item,
            cursor,
            arrayColumns,
            arrayViewIDs,
            0);


    classlist.setAdapter(dataAdapter);
    value = getIntent().getExtras().getString("add");

【问题讨论】:

  • 您必须删除您的应用程序或清除数据,才能使用_id 列重新创建数据库。
  • 我已经这样做了.....
  • @blackbelt 的解决方案奏效了。

标签: android sqlite android-listview simplecursoradapter


【解决方案1】:

您的查询的投影缺少 _id 字段,

改变

 Cursor mCursor = db.query(TABLE_CLASS_LIST, new String[] { KEY_SUBJECT_NAME_LIST, KEY_CLASS_DIV_LIST},
        null, null, null, null, null);

 Cursor mCursor = db.query(TABLE_CLASS_LIST, new String[] { KEY_LIST_ID, KEY_SUBJECT_NAME_LIST, KEY_CLASS_DIV_LIST},
        null, null, null, null, null);

【讨论】:

    猜你喜欢
    • 2011-06-25
    • 2011-04-29
    • 2013-06-15
    • 2012-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多