应用程序显示白屏并自动关闭(Android Studio)
App Shows White Screen and closed automatically(Android Studio)
我的应用程序无法运行 我尝试实现一个显示内容的简单应用程序,内容存储在 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
}
}
感谢所有试图解决的人。但它现在正在工作。
我所做的只是将此代码段替换为
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()
我的应用程序无法运行 我尝试实现一个显示内容的简单应用程序,内容存储在 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
}
}
感谢所有试图解决的人。但它现在正在工作。 我所做的只是将此代码段替换为
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()