Android Kotlin SQLite — создание таблицы в режиме реального времени

#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 дня поиска :/