#android #sqlite #kotlin #create-table
#Android #sqlite #kotlin #создать таблицу
Вопрос:
Привет, у меня проблема, когда я хочу создать новую таблицу, нажав кнопку, подобную этой
buttonAddTable.setOnClickListener {
db?.execSQL("CREATE TABLE ${tabela}("
"${BaseColumns._ID} INTEGER PRIMARY KEY,"
"${TableInfo.TABLE_COLUMN_TITLE} TEXT NOT NULL,"
"${TableInfo.TABLE_COLUMN_MESSAGE} TEXT NOT NULL)")
все в порядке, и я могу добавить к нему дату следующим образом
if (intent.hasExtra("tabela")) {
var tabela = intent.getCharSequenceExtra("tabela")
var tab = tabela.toString()
Toast.makeText(applicationContext,"This table is: " tabela, Toast.LENGTH_SHORT).show()
val value = ContentValues()
value.put(TableInfo.TABLE_COLUMN_TITLE, title)
value.put(TableInfo.TABLE_COLUMN_MESSAGE, message)
db.insert(tab, null, value)
работает хорошо, но когда я хочу показать эту таблицу следующим образом
if (intent.hasExtra("tabela")){
var tabela = intent.getCharSequenceExtra("tabela")
var tab = tabela.toString()
val cursor = db.query(
tab, null,
null, null,
null, null, null
)
val notes = ArrayList<Note>()
if (cursor.count > 0) {
cursor.moveToFirst()
while (!cursor.isAfterLast) {
val note = Note()
note.id = cursor.getInt(0)
note.title = cursor.getString(1)
note.message = cursor.getString(2)
notes.add(note)
cursor.moveToNext()
}
}
cursor.close()
recyler_view.layoutManager = GridLayoutManager(applicationContext, 2)
recyler_view.adapter = CardViewAdapter(applicationContext, db, notes)
я вижу ошибку java.lang.Исключение IndexOutOfBoundsException: индекс: 1, Размер: 1.
Почему? Что я делаю не так?
когда я создаю таблицу в fun onCreate при первом запуске приложения, все в порядке
РЕДАКТИРОВАТЬ Я покажу вам все, может быть, проще найти ошибку: добавить строку
if (intent.hasExtra("tabela")) {
var tabela = intent.getCharSequenceExtra("tabela")
var tab = tabela.toString()
Toast.makeText(applicationContext,"This table is: " tabela, Toast.LENGTH_SHORT).show()
val value = ContentValues()
value.put(TableInfo.TABLE_COLUMN_TITLE, title)
value.put(TableInfo.TABLE_COLUMN_MESSAGE, message)
db.insert(tab, null, value)
Toast.makeText(
applicationContext,
"Notatka zapisana w konkretnej tabeli",
Toast.LENGTH_SHORT
).show()
val intent = Intent(applicationContext, MainActivity::class.java)
startActivity(intent)
db.close()
onBackPressed()
}else {
val value = ContentValues()
value.put(TableInfo.TABLE_COLUMN_TITLE, title)
value.put(TableInfo.TABLE_COLUMN_MESSAGE, message)
db.insert(TableInfo.TABLE_NAME, null, value)
save_info_Toast.show()
val intent = Intent(applicationContext, MainActivity::class.java)
startActivity(intent)
db.close()
onBackPressed()
}
показать строку
val dbHelper = DataBaseHelper(applicationContext)
val db = dbHelper.writableDatabase
if (intent.hasExtra("tabela")){
var tabela = intent.getCharSequenceExtra("tabela")
var tab = tabela.toString()
val cursor = db.query(
tab, null,
null, null,
null, null, null
)
val notes = ArrayList<Note>()
if (cursor.count > 0) {
cursor.moveToFirst()
while (!cursor.isAfterLast) {
val note = Note()
note.id = cursor.getInt(0)
note.title = cursor.getString(1)
note.message = cursor.getString(2)
notes.add(note)
cursor.moveToNext()
}
}
cursor.close()
recyler_view.layoutManager = GridLayoutManager(applicationContext, 2)
recyler_view.adapter = CardViewAdapter(applicationContext, db, notes)
}else {
val cursor = db.query(
TableInfo.TABLE_NAME, null,
null, null,
null, null, null
)
val notes = ArrayList<Note>()
if (cursor.count > 0) {
cursor.moveToFirst()
while (!cursor.isAfterLast) {
val note = Note()
note.id = cursor.getInt(0)
note.title = cursor.getString(1)
note.message = cursor.getString(2)
notes.add(note)
cursor.moveToNext()
}
}
cursor.close()
recyler_view.layoutManager = GridLayoutManager(applicationContext, 2)
recyler_view.adapter = CardViewAdapter(applicationContext, db, notes)
}
}
и просмотр карты
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
//------------ELEMENT POJEDYNCZEJ NOTATKI--------
val cardView_note = holder.view.note_cardView
val title = holder.view.title_cardView
val message = holder.view.message_cardView
val context: Context = holder.view.context
//---------------------------------
title.setText(notes[holder.adapterPosition].title)
message.setText(notes[holder.adapterPosition].message)
}
Комментарии:
1. Привет, вы можете перебирать столбцы курсора с помощью cursor.getColumnNames и показывать нам журнал?
2. Вы уверены, что можете вставлять новые строки в таблицу? Вы проверили значение результата
db.insert(tab, null, value)
?3. У меня есть одна таблица, которая создается при первом запуске приложения. И теперь, когда я создаю новую таблицу и новую строку, я могу показать эту новую таблицу, но когда я добавляю строку в таблицу «Примечания», я все еще вижу эту ошибку java.lang. Исключение IndexOutOfBoundsException: индекс: 3, Размер: 3.
4. Я редактирую сообщение, теперь вы можете видеть почти все
5. Я нашел свою ошибку. В переопределении getItemCount(): я по-прежнему использовал то же имя таблицы, что и в переменной. небольшая ошибка 3 дня поиска :/