Вызывается: java.lang.IllegalArgumentException: column '_id' не существует

Я хочу показать свою таблицу, используя курсор и список. Но я получил ошибку.

Caused by: java.lang.IllegalArgumentException: column '_id' does not exist 

Но я не объявлял _id в своем приложении. Может кто-нибудь мне помочь?

Это мой код в dbHelper.

 public Cursor DataPesanKeluar() { Cursor c = dba.rawQuery( " SELECT " + kel_id + "," + e_chiperteks + "," + k_nama + "," + kel_waktu + " FROM " + tbPesan + " INNER JOIN " + tbPesanKeluar + " ON " + tbPesan + "." + p_idpesan + "=" + tbPesanKeluar + "." + kel_idpesan + " INNER JOIN " + tbEnkrip + " ON " + tbPesan + "." + p_idenkrip + "=" + tbEnkrip + "." + e_idenkrip + " INNER JOIN " + tbKontak + " ON " + tbPesan + "." + p_idkontak + "=" + tbKontak + "." + k_id , null); return c; } 

И это мой класс для отображения данных.

 listKeluar = (ListView)findViewById(R.id.listKeluar); String [] keluar = { data.k_nama, data.m_chiperteks, data.kel_waktu }; int[] k = { R.id.tNama, R.id.tChiper, R.id.tWaktu }; cursor = data.DataPesanKeluar(); SimpleCursorAdapter keluarAdapter = new SimpleCursorAdapter( this, R.layout.baris_keluar, cursor, keluar, k ); //this is my error listKeluar.setAdapter(keluarAdapter); listKeluar.setOnItemClickListener( new OnItemClickListener() { @Override public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { Cursor listCursor = (Cursor) arg0.getItemAtPosition(arg2); String idkeluar = listCursor.getString(listCursor.getColumnIndex(data.kel_id)); String nama = listCursor.getString(listCursor.getColumnIndex(data.k_nama)); String chiperteks = listCursor.getString(listCursor.getColumnIndex(data.m_chiperteks)); String waktu = listCursor.getString(listCursor.getColumnIndex(data.kel_waktu)); 

Курсор должен содержать столбец с именем _id или этот класс не будет работать.

Возможно, вы попытаетесь подделать его, используя свой существующий идентификатор:

 Cursor c = dba.rawQuery( " SELECT " + kel_id + " AS _id," + kel_id + "," + e_chiperteks + "," + k_nama + "," + kel_waktu + " FROM " + tbPesan + " INNER JOIN " + tbPesanKeluar + " ON " + tbPesan + "." + p_idpesan + "=" + tbPesanKeluar + "." + kel_idpesan + " INNER JOIN " + tbEnkrip + " ON " + tbPesan + "." + p_idenkrip + "=" + tbEnkrip + "." + e_idenkrip + " INNER JOIN " + tbKontak + " ON " + tbPesan + "." + p_idkontak + "=" + tbKontak + "." + k_id , null); 

Сделать key_id как "_id"

 public Cursor DataPesanKeluar() { Cursor c = dba.rawQuery( " SELECT " + kel_id + " AS _id" + "," + e_chiperteks + "," + k_nama + "," + kel_waktu + " FROM " + tbPesan + " INNER JOIN " + tbPesanKeluar + " ON " + tbPesan + "." + p_idpesan + "=" + tbPesanKeluar + "." + kel_idpesan + " INNER JOIN " + tbEnkrip + " ON " + tbPesan + "." + p_idenkrip + "=" + tbEnkrip + "." + e_idenkrip + " INNER JOIN " + tbKontak + " ON " + tbPesan + "." + p_idkontak + "=" + tbKontak + "." + k_id , null); return c; 

}

Просто удалите kel_id + "," из вашего оператора select, потому что таблица, из которой вы пытаетесь получить данные, не содержит столбца "_id".

Добавьте _id INTEGER PRIMARY KEY AUTOINCREMENT в ваш оператор create table. Android иногда требует поля _id