Вопрос:
Я хочу показать свою таблицу, используя курсор и список. но я получил ошибку.
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 или этот класс не будет работать.
Возможно, вы попытаетесь подделать его, используя свой существующий 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); Ответ №1
Сделать 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;
}
Ответ №2
Просто удалите kel_id + “,” из вашего оператора select, потому что таблица, из которой вы пытаетесь получить данные, не содержит столбца “_id”.
Ответ №3
Добавьте _id INTEGER PRIMARY KEY AUTOINCREMENT в инструкцию create table. Android иногда требует поля _id