Вылетает приложение при заходе на определенную Activity

Разрабатываю приложение для учета семейных финансов, столкнулся с проблемой, что у меня вылетает приложение при заходе на ActivityHis. Предполагаю, что проблема связана с моим DbHelper'ом, хоть и не уверен. Пользователь должен авторизоваться и перейти на вкладки с расходом и доходом, внести данные, которые попадают в бд (это работает), а затем может перейти на ActivityHis и увидеть список, реализованный через RecyclerView, где будут отображаться как расходы, так и доходы. Код ActivityHis

class ActivityHis : AppCompatActivity() {

    private lateinit var historyList: RecyclerView
    private lateinit var historyAdapter: HistoryAdapter
    private lateinit var dbHelper: DbHelper

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_his)

        // Создание экземпляра DbHelper
        dbHelper = DbHelper(this, null)

        // Настройка кнопки "Назад"
        val buttonBack: Button = findViewById(R.id.button_back)
        buttonBack.setOnClickListener {
            finish()
        }

        // Настройка RecyclerView
        historyList = findViewById(R.id.history_list)
        historyAdapter = HistoryAdapter(this, getHistoryData())
        historyList.adapter = historyAdapter
        historyList.layoutManager = LinearLayoutManager(this)
    }

    private fun getHistoryData(): List<History> {
        // Получение данных из базы данных через DbHelper
        return dbHelper.getHistoryData()
    }
}

Код DbHelper:

class DbHelper(context: Context, factory: SQLiteDatabase.CursorFactory?) :
    SQLiteOpenHelper(context, "app.db", factory, 1) {

    override fun onCreate(db: SQLiteDatabase?) {
        val query =
            "CREATE TABLE IF NOT EXISTS users (_id INTEGER PRIMARY KEY AUTOINCREMENT, login TEXT, pass TEXT)"
        db!!.execSQL(query)

        val queryIncome =
            "CREATE TABLE IF NOT EXISTS incomes (id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER, doh_desc TEXT, doh_sum REAL, date DATE, time TIME)"
        db.execSQL(queryIncome)
        val queryExpenses =
            "CREATE TABLE IF NOT EXISTS expenses (id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER, rash_desc TEXT, rash_sum REAL, date DATE, time TIME)"
        db.execSQL(queryExpenses)
    }

    override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
        db!!.execSQL("DROP TABLE IF EXISTS users")
        db.execSQL("DROP TABLE incomes")
        onCreate(db)
    }

    fun addUser(user: User): Boolean {
        val values = ContentValues()
        values.put("login", user.login)
        values.put("pass", user.pass)

        val db = this.writableDatabase
        db.insert("users", null, values)
        return true
    }

    fun getUser(login: String, pass: String): Boolean {
        val db = this.readableDatabase

        val result =
            db.rawQuery("SELECT * FROM users WHERE login = '$login' AND pass = '$pass'", null)
        return result.moveToFirst()
    }

    fun addIncome(doh: Doh) {
        val values = ContentValues()
        values.put("user_id", doh.userId)
        values.put("doh_desc", doh.doh_desc)
        values.put("doh_sum", doh.doh_sum)
        values.put("date", doh.date)
        values.put("time", doh.time)

        val db = this.writableDatabase
        db.insert("incomes", null, values)
    }

    fun addRash(rash: Rash) {
        val values = ContentValues()
        values.put("user_id", rash.userId)
        values.put("rash_desc", rash.rash_desc)
        values.put("rash_sum", rash.rash_sum)
        values.put("date", rash.date)
        values.put("time", rash.time)

        val db = this.writableDatabase
        db.insert("expenses", null, values)
    }

    @SuppressLint("Range")
    fun getHistoryData(): List<History> {
        // Получение данных из базы данных
        val db = this.readableDatabase

        val cursor = db.rawQuery(
            "SELECT * FROM (SELECT * FROM expenses UNION ALL SELECT * FROM incomes) ORDER BY date DESC",
            null
        )
        val historyList = mutableListOf<History>()

        while (cursor.moveToNext()) {
            val id = cursor.getInt(cursor.getColumnIndex("_id"))
            val desc = cursor.getString(cursor.getColumnIndex("rash_desc")) 
            val sum = cursor.getDouble(cursor.getColumnIndex("rash_sum"))  
            val date = cursor.getString(cursor.getColumnIndex("date"))
            val time = cursor.getString(cursor.getColumnIndex("time")) 
            val type = if (cursor.getInt(cursor.getColumnIndex("user_id")) == 0) 0 else 1 

            val history = History(id, desc, sum, date, time, type)
            historyList.add(history)
        }

        cursor.close()
        return historyList
    }
}

Код класса History

data class History(
    val id: Int,
    val desc: String,
    val sum: Double,
    val date: String,
    val time: String, // Добавьте параметр time
    val type: Int
)

И код HistoryAdapter:

class HistoryAdapter(
    private val context: Context,
    private val historyList: List<History>
) : RecyclerView.Adapter<HistoryAdapter.ViewHolder>() {

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val view = LayoutInflater.from(context).inflate(R.layout.history_list, parent, false)
        return ViewHolder(view)
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val history = historyList[position]

        holder.nameTextView.text = history.id.toString() //
        holder.descriptionTextView.text = history.desc //
        holder.amountTextView.text = history.sum.toString()

        val color = if (history.type == 0) Color.RED else Color.GREEN
        holder.amountTextView.setTextColor(color)

        val drawable = if (history.type == 0) R.drawable.up_arrow_svgrepo_com else R.drawable.down_arrow_svgrepo_com
        holder.iconImageView.setImageResource(drawable)
    }

    override fun getItemCount(): Int {
        return historyList.size
    }

    class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        val nameTextView: TextView = itemView.findViewById(R.id.name_text_view)
        val descriptionTextView: TextView = itemView.findViewById(R.id.description_text_view)
        val amountTextView: TextView = itemView.findViewById(R.id.amount_text_view)
        val iconImageView: ImageView = itemView.findViewById(R.id.icon_image_view)
    }
}

Ответы (0 шт):