Приложение показывает белый экран и закрывается автоматически (Android Studio) - PullRequest
0 голосов
/ 13 марта 2020

Мое приложение не работает. Я пытаюсь реализовать простое приложение, в котором содержимое и содержимое хранятся в базе данных sql. Мое приложение запускается и показывает полный белый экран и через некоторое время автоматически закрывается. После закрытия я получил ошибку в logcat: java.lang.OutOfMemoryError: OutOfMemoryError thrown while trying to throw OutOfMemoryError;

нет трассировки стека

User.kt

class User{
    var id = 0
    var time = ""
    var amp = ""
    var text = ""
}

MainActivity .kt

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        setSupportActionBar(toolbar)
        title = "Maintainer"
        val dbHelper = SchDbHandler(this)
        val recyclerView = findViewById<RecyclerView>(R.id.recycler)
        recyclerView.layoutManager = LinearLayoutManager(this)
        val adapter = Adapter(dbHelper.readData())
        recyclerView.adapter = adapter
        fab.setOnClickListener {
            val user = User()
            user.time = "10:10"
            user.amp = "AM"
            user.text = "I am here"
            dbHelper.insertData(user)
            adapter.notifyItemChanged(dbHelper.readData().size - 1)
        }
    }
}

Файл обработчика базы данных

class SchDbHandler(var context: Context): SQLiteOpenHelper(context, DB_NAME, null, DB_VERSION) {
    override fun onCreate(db: SQLiteDatabase?) {
        val createScheduleTable: String = "CREATE TABLE $TABLE_NAME (" +
        "$COL_ID INTEGER PRIMARY KEY AUTOINCREMENT," +
        "$COL_TIME VARCHAR(256)," +
        "$COL_AMP VARCHAR(256)," +
        "$COL_TEXT VARCHAR(256)); "
        db?.execSQL(createScheduleTable)
    }

    override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
    }

    fun insertData(user: User){
        val db = this.writableDatabase
        var cv = ContentValues()
        cv.put(COL_TIME, user.time)
        cv.put(COL_AMP, user.amp)
        cv.put(COL_TEXT, user.text)
        var result = db.insert(TABLE_NAME, null, cv)
        if(result == (-1).toLong()){
            Toast.makeText(context, "FAILED", Toast.LENGTH_SHORT).show()
        }
        else{
            Toast.makeText(context, "SUCCESS", Toast.LENGTH_SHORT).show()
        }
    }

    fun readData():MutableList<User>{
        var list: MutableList<User> = ArrayList()
        val db = this.readableDatabase
        val query = " SELECT * from $TABLE_NAME "
        val result = db.rawQuery(query, null)
        if(result.moveToFirst()){
            do{
                var user = User()
                user.id = result.getString(result.getColumnIndex(COL_ID)).toInt()
                user.time = result.getString(result.getColumnIndex(COL_TIME))
                user.amp = result.getString(result.getColumnIndex(COL_AMP))
                user.text = result.getString(result.getColumnIndex(COL_TEXT))
                list.add(user)
            }while(result.moveToFirst())
        }
        result.close()
        db.close()
        return list
    }
}

1 Ответ

0 голосов
/ 13 марта 2020

Спасибо всем, кто пытался решить. Но это сейчас работает. Я просто заменил этот сегмент кода на

val result = db.rawQuery(query, null)
        if(result.moveToFirst()){
            do{
                var user = User()
                user.id = result.getString(result.getColumnIndex(COL_ID)).toInt()
                user.time = result.getString(result.getColumnIndex(COL_TIME))
                user.amp = result.getString(result.getColumnIndex(COL_AMP))
                user.text = result.getString(result.getColumnIndex(COL_TEXT))
                list.add(user)
            }while(result.moveToFirst())
        }
        result.close()

на

val cursor: Cursor = db.rawQuery(query, null)
        if(cursor.moveToFirst()) {
            while (!cursor.isAfterLast) {
                var user = User()
                user.id = cursor.getString(cursor.getColumnIndex(COL_ID)).toInt()
                user.time = cursor.getString(cursor.getColumnIndex(COL_TIME))
                user.amp = cursor.getString(cursor.getColumnIndex(COL_AMP))
                user.text = cursor.getString(cursor.getColumnIndex(COL_TEXT))
                list.add(user)
                cursor.moveToNext();
            }
        }
        cursor.close()
...