android 应用程序UI没有响应

uqxowvwt  于 2023-06-20  发布在  Android
关注(0)|答案(1)|浏览(153)

我开发了一个看板。当它运行良好时,只有班级。它被执行呈现3个样本项目,每个被分配一种颜色(视图卡);但是现在我为用户添加了进程,它只显示一条错误消息:
系统UI没有响应。关闭应用程序/等待
它不显示任何有关应用程序的信息,只有等待是否关闭应用程序或等待的消息:

我粘贴了我的类和AndroidManifest的代码。我不明白为什么这会阻止打开应用程序的界面。

  1. AndroidManifest.xml
  2. <?xml version="1.0" encoding="utf-8"?>
  3. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  4. xmlns:tools="http://schemas.android.com/tools">
  5. <application
  6. android:allowBackup="true"
  7. android:dataExtractionRules="@xml/data_extraction_rules"
  8. android:fullBackupContent="@xml/backup_rules"
  9. android:icon="@mipmap/ic_launcher"
  10. android:label="@string/app_name"
  11. android:roundIcon="@mipmap/ic_launcher_round"
  12. android:supportsRtl="true"
  13. android:theme="@style/Theme.Knbktlnbrd"
  14. tools:targetApi="31">
  15. <activity
  16. android:name=".MainActivity"
  17. android:exported="true"
  18. android:label="@string/app_name"
  19. android:theme="@style/Theme.Knbktlnbrd">
  20. <intent-filter>
  21. <action android:name="android.intent.action.MAIN" />
  22. <category android:name="android.intent.category.LAUNCHER" />
  23. </intent-filter>
  24. </activity>
  25. </application>
  26. </manifest>
  1. DatabaseHelper.kt
  2. package com.example.knbktlnbrd
  3. import android.content.ContentValues
  4. import android.content.Context
  5. import android.database.Cursor
  6. import android.database.sqlite.SQLiteDatabase
  7. import android.database.sqlite.SQLiteOpenHelper
  8. class DatabaseHelper(context: Context) : SQLiteOpenHelper(context, DATABASE_NAME, null, DATABASE_VERSION) {
  9. override fun onCreate(db: SQLiteDatabase) {
  10. val createTableQuery = """
  11. CREATE TABLE IF NOT EXISTS ${User.TABLE_NAME} (
  12. ${User.COLUMN_CELULAR} REAL,
  13. ${User.COLUMN_NOMBRE} TEXT,
  14. ${User.COLUMN_CARGO} INTEGER,
  15. ${User.COLUMN_ROL} INTEGER
  16. )
  17. """.trimIndent()
  18. db.execSQL(createTableQuery)
  19. val createProyectoTableQuery = """
  20. CREATE TABLE IF NOT EXISTS ${Proyecto.TABLE_NAME} (
  21. ${Proyecto.COLUMN_ID_PROYECTO} INTEGER PRIMARY KEY,
  22. ${Proyecto.COLUMN_NOMBRE} TEXT,
  23. ...
  24. )
  25. """.trimIndent()
  26. db.execSQL(createProyectoTableQuery)
  27. }
  28. override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
  29. // Aquí puedes implementar la lógica para actualizar la base de datos si hay cambios en la estructura
  30. // Por ejemplo, puedes eliminar la tabla existente y crear una nueva versión de la tabla
  31. //db.execSQL("DROP TABLE IF EXISTS ${User.TABLE_NAME}")
  32. //onCreate(db)
  33. }
  34. fun insertUser(user: User): Long {
  35. val database = writableDatabase
  36. val contentValues = ContentValues().apply {
  37. put(User.COLUMN_CELULAR, user.celular)
  38. put(User.COLUMN_NOMBRE, user.nombre)
  39. put(User.COLUMN_CARGO, user.cargo)
  40. put(User.COLUMN_ROL, user.rol)
  41. }
  42. return database.insert(User.TABLE_NAME, null, contentValues)
  43. }
  44. fun updateUser(user: User): Int {
  45. val database = writableDatabase
  46. val contentValues = ContentValues().apply {
  47. put(User.COLUMN_NOMBRE, user.nombre)
  48. put(User.COLUMN_CARGO, user.cargo)
  49. put(User.COLUMN_ROL, user.rol)
  50. }
  51. return database.update(
  52. User.TABLE_NAME,
  53. contentValues,
  54. "${User.COLUMN_CELULAR} = ?",
  55. arrayOf(user.celular.toString())
  56. )
  57. }
  58. fun deleteUser(user: User): Int {
  59. val database = writableDatabase
  60. return database.delete(
  61. User.TABLE_NAME,
  62. "${User.COLUMN_CELULAR} = ?",
  63. arrayOf(user.celular.toString())
  64. )
  65. }
  66. fun getAllUsers(): List<User> {
  67. val userList = mutableListOf<User>()
  68. val selectQuery = "SELECT * FROM ${User.TABLE_NAME}"
  69. val database = readableDatabase
  70. val cursor: Cursor? = database.rawQuery(selectQuery, null)
  71. cursor?.use {
  72. if (it.moveToFirst()) {
  73. do {
  74. val celular = it.getDouble(it.getColumnIndex(User.COLUMN_CELULAR))
  75. val nombre = it.getString(it.getColumnIndex(User.COLUMN_NOMBRE))
  76. val cargo = it.getInt(it.getColumnIndex(User.COLUMN_CARGO))
  77. val rol = it.getInt(it.getColumnIndex(User.COLUMN_ROL))
  78. val user = User(celular, nombre, cargo, rol)
  79. userList.add(user)
  80. } while (it.moveToNext())
  81. }
  82. }
  83. return userList
  84. }
  85. companion object {
  86. private const val DATABASE_NAME = "knbktlnbrd.db"
  87. private const val DATABASE_VERSION = 1
  88. }
  89. }
  90. /******************************************************************************************/
  91. MainActivity.kt
  92. package com.example.knbktlnbrd
  93. import android.os.Bundle
  94. import androidx.activity.ComponentActivity
  95. import androidx.activity.compose.setContent
  96. import androidx.compose.foundation.layout.fillMaxSize
  97. import androidx.compose.material3.MaterialTheme
  98. import androidx.compose.material3.Surface
  99. import androidx.compose.material3.Text
  100. import androidx.compose.runtime.Composable
  101. import androidx.compose.ui.Modifier
  102. import androidx.compose.ui.tooling.preview.Preview
  103. import com.example.knbktlnbrd.ui.theme.KnbktlnbrdTheme
  104. import com.example.knbktlnbrd.DatabaseHelper
  105. import android.database.Cursor
  106. import android.database.sqlite.SQLiteDatabase
  107. import android.database.sqlite.SQLiteOpenHelper
  108. import android.graphics.Color
  109. import android.view.Menu
  110. import android.view.MenuItem
  111. import android.view.View
  112. import androidx.appcompat.app.AppCompatActivity
  113. import androidx.recyclerview.widget.LinearLayoutManager
  114. import androidx.recyclerview.widget.RecyclerView
  115. import android.view.LayoutInflater
  116. import androidx.cardview.widget.CardView
  117. import android.widget.LinearLayout
  118. import com.example.knbktlnbrd.UserAdapter
  119. class MainActivity : ComponentActivity() {
  120. private lateinit var recyclerView: RecyclerView
  121. private lateinit var adapter: ProjectAdapter
  122. private lateinit var dbHelper: DatabaseHelper
  123. override fun onCreate(savedInstanceState: Bundle?) {
  124. super.onCreate(savedInstanceState)
  125. /*setContent {
  126. KnbktlnbrdTheme {
  127. // A surface container using the 'background' color from the theme
  128. Surface(
  129. modifier = Modifier.fillMaxSize(),
  130. color = MaterialTheme.colorScheme.background
  131. ) {
  132. Greeting("Android")
  133. }
  134. }
  135. }*/
  136. setContentView(R.layout.activity_main)
  137. recyclerView = findViewById(R.id.recyclerView)
  138. recyclerView.layoutManager = LinearLayoutManager(this)
  139. adapter = ProjectAdapter()
  140. recyclerView.adapter = adapter
  141. dbHelper = DatabaseHelper(this)
  142. loadProjects()
  143. }
  144. override fun onCreateOptionsMenu(menu: Menu): Boolean {
  145. menuInflater.inflate(R.menu.main_menu, menu)
  146. return true
  147. }
  148. override fun onOptionsItemSelected(item: MenuItem): Boolean {
  149. return when (item.itemId) {
  150. R.id.menu_add_project -> {
  151. // Abrir la actividad de creación de proyectos
  152. // Implementa la lógica según tus necesidades
  153. true
  154. }
  155. else -> super.onOptionsItemSelected(item)
  156. }
  157. }
  158. private fun loadProjects() {
  159. val db: SQLiteDatabase = dbHelper.readableDatabase
  160. val projection = arrayOf("Id_Proyecto", "Nombre") // Columnas que deseas obtener
  161. val mainLayout: LinearLayout = findViewById(R.id.projectContainer)
  162. val cursor: Cursor = db.query(
  163. //"KnbProy",
  164. "proyecto",
  165. projection,
  166. null,
  167. null,
  168. null,
  169. null,
  170. null
  171. )
  172. val projects = mutableListOf<Project>()
  173. while (cursor.moveToNext()) {
  174. val projectId = cursor.getInt(cursor.getColumnIndexOrThrow("Id_Proyecto"))
  175. val projectName = cursor.getString(cursor.getColumnIndexOrThrow("Nombre"))
  176. // Genera un color pastel diferente para cada tarjeta
  177. val cardColor = generatePastelColor()
  178. val project = Project(projectId, projectName, cardColor)
  179. projects.add(project)
  180. }
  181. cursor.close()
  182. db.close()
  183. adapter.setProjects(projects)
  184. // Aplicar estilo de esquinas redondeadas y separación entre las viewcards
  185. //val cardRadius = resources.getDimension(R.dimen.view_card_radius)
  186. val cardRadiusValue = resources.getDimension(R.dimen.view_card_radius)
  187. val cardRadius = resources.getDimension(R.dimen.view_card_radius)
  188. val cardMargin = resources.getDimensionPixelSize(R.dimen.view_card_margin)
  189. for (project in projects) {
  190. val viewCard = LayoutInflater.from(this).inflate(R.layout.view_card, null) as CardView
  191. val cardLayoutParams = LinearLayout.LayoutParams(
  192. LinearLayout.LayoutParams.MATCH_PARENT,
  193. LinearLayout.LayoutParams.WRAP_CONTENT
  194. )
  195. cardLayoutParams.setMargins(cardMargin, cardMargin, cardMargin, cardMargin)
  196. viewCard.layoutParams = cardLayoutParams
  197. viewCard.radius = cardRadius
  198. // Resto del código para configurar los elementos de la viewcard
  199. mainLayout.addView(viewCard)
  200. }
  201. }
  202. private fun generatePastelColor(): Int {
  203. val random = java.util.Random()
  204. val hue = random.nextInt(360).toFloat()
  205. val pastelColor = Color.HSVToColor(floatArrayOf(hue, 0.3f, 1f))
  206. return pastelColor
  207. }
  208. }
  209. @Composable
  210. fun Greeting(name: String, modifier: Modifier = Modifier) {
  211. Text(
  212. text = "Hello $name!",
  213. modifier = modifier
  214. )
  215. }
  216. @Preview(showBackground = true)
  217. @Composable
  218. fun GreetingPreview() {
  219. KnbktlnbrdTheme {
  220. Greeting("Android")
  221. }
  222. }
  223. /******************************************************************************************/
  224. ProjectAdapter.kt
  225. package com.example.knbktlnbrd
  226. import android.view.LayoutInflater
  227. import android.view.View
  228. import android.view.ViewGroup
  229. import android.widget.TextView
  230. import androidx.recyclerview.widget.RecyclerView
  231. class ProjectAdapter : RecyclerView.Adapter<ProjectAdapter.ProjectViewHolder>() {
  232. private var projects: List<Project> = emptyList()
  233. override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ProjectViewHolder {
  234. val view = LayoutInflater.from(parent.context)
  235. .inflate(R.layout.item_project, parent, false)
  236. return ProjectViewHolder(view)
  237. }
  238. override fun onBindViewHolder(holder: ProjectViewHolder, position: Int) {
  239. val project = projects[position]
  240. holder.bind(project)
  241. }
  242. override fun getItemCount(): Int {
  243. return projects.size
  244. }
  245. fun setProjects(projects: List<Project>) {
  246. this.projects = projects
  247. notifyDataSetChanged()
  248. }
  249. inner class ProjectViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
  250. private val projectNameTextView: TextView = itemView.findViewById(R.id.projectNameTextView)
  251. fun bind(project: Project) {
  252. projectNameTextView.text = project.projectName
  253. itemView.setBackgroundColor(project.cardColor)
  254. itemView.setOnClickListener {
  255. // Abrir la actividad de creación de proyectos con la información del proyecto seleccionado
  256. // Implementa la lógica según tus necesidades
  257. }
  258. }
  259. }
  260. }
  261. /******************************************************************************************/
  262. Project.kt
  263. package com.example.knbktlnbrd
  264. data class Project(
  265. val projectId: Int,
  266. val projectName: String,
  267. val cardColor: Int
  268. )
  269. /******************************************************************************************/
  270. Proyecto.kt
  271. package com.example.knbktlnbrd
  272. class Proyecto {
  273. companion object {
  274. const val TABLE_NAME = "Proyecto"
  275. const val COLUMN_ID_PROYECTO = "Id_Proyecto"
  276. const val COLUMN_NOMBRE = "Nombre"
  277. // Agrega aquí las demás columnas de la tabla "Proyecto"
  278. }
  279. }
  280. /******************************************************************************************/
  281. User.kt
  282. package com.example.knbktlnbrd
  283. import android.content.ContentValues
  284. import android.database.Cursor
  285. import android.database.sqlite.SQLiteDatabase
  286. class User(val celular: Double, val nombre: String, val cargo: Int, val rol: Int) {
  287. companion object {
  288. const val TABLE_NAME = "Usuario"
  289. const val COLUMN_CELULAR = "Celular"
  290. const val COLUMN_NOMBRE = "Nombre"
  291. const val COLUMN_CARGO = "Cargo"
  292. const val COLUMN_ROL = "Rol"
  293. fun createUserTable(database: SQLiteDatabase) {
  294. val createTableQuery = """
  295. CREATE TABLE IF NOT EXISTS $TABLE_NAME (
  296. $COLUMN_CELULAR REAL,
  297. $COLUMN_NOMBRE TEXT,
  298. $COLUMN_CARGO INTEGER,
  299. $COLUMN_ROL INTEGER
  300. )
  301. """.trimIndent()
  302. database.execSQL(createTableQuery)
  303. }
  304. }
  305. fun insertUser(database: SQLiteDatabase): Long {
  306. val contentValues = ContentValues()
  307. contentValues.put(COLUMN_CELULAR, celular)
  308. contentValues.put(COLUMN_NOMBRE, nombre)
  309. contentValues.put(COLUMN_CARGO, cargo)
  310. contentValues.put(COLUMN_ROL, rol)
  311. return database.insert(TABLE_NAME, null, contentValues)
  312. }
  313. fun updateUser(database: SQLiteDatabase): Int {
  314. val contentValues = ContentValues()
  315. contentValues.put(COLUMN_NOMBRE, nombre)
  316. contentValues.put(COLUMN_CARGO, cargo)
  317. contentValues.put(COLUMN_ROL, rol)
  318. return database.update(
  319. TABLE_NAME,
  320. contentValues,
  321. "$COLUMN_CELULAR = ?",
  322. arrayOf(celular.toString())
  323. )
  324. }
  325. fun deleteUser(database: SQLiteDatabase): Int {
  326. return database.delete(
  327. TABLE_NAME,
  328. "$COLUMN_CELULAR = ?",
  329. arrayOf(celular.toString())
  330. )
  331. }
  332. fun getUser(database: SQLiteDatabase): Cursor {
  333. return database.query(
  334. TABLE_NAME,
  335. null,
  336. "$COLUMN_CELULAR = ?",
  337. arrayOf(celular.toString()),
  338. null,
  339. null,
  340. null
  341. )
  342. }
  343. }
  344. /******************************************************************************************/
  345. UserAdapter.kt
  346. package com.example.knbktlnbrd
  347. import android.content.Context
  348. import android.view.LayoutInflater
  349. import android.view.View
  350. import android.view.ViewGroup
  351. import android.widget.TextView
  352. import androidx.recyclerview.widget.RecyclerView
  353. import com.example.knbktlnbrd.R
  354. import com.example.knbktlnbrd.User
  355. class UserAdapter(private val context: Context, private var userList: List<User>) :
  356. RecyclerView.Adapter<UserAdapter.UserViewHolder>() {
  357. override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): UserViewHolder {
  358. val view =
  359. LayoutInflater.from(context).inflate(R.layout.user_item, parent, false)
  360. return UserViewHolder(view)
  361. }
  362. override fun onBindViewHolder(holder: UserViewHolder, position: Int) {
  363. val user = userList[position]
  364. holder.bind(user)
  365. }
  366. override fun getItemCount(): Int {
  367. return userList.size
  368. }
  369. fun setUsers(users: List<User>) {
  370. userList = users
  371. notifyDataSetChanged()
  372. }
  373. inner class UserViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
  374. private val celularTextView: TextView = itemView.findViewById(R.id.textViewCelular)
  375. private val nombreTextView: TextView = itemView.findViewById(R.id.textViewNombre)
  376. private val cargoTextView: TextView = itemView.findViewById(R.id.textViewCargo)
  377. private val rolTextView: TextView = itemView.findViewById(R.id.textViewRol)
  378. fun bind(user: User) {
  379. celularTextView.text = user.celular.toString()
  380. nombreTextView.text = user.nombre
  381. cargoTextView.text = user.cargo.toString()
  382. rolTextView.text = user.rol.toString()
  383. }
  384. }
  385. }
  386. /******************************************************************************************/
  387. UsuariosCrearActivity.kt
  388. package com.example.knbktlnbrd
  389. import android.content.ContentValues
  390. import android.database.sqlite.SQLiteDatabase
  391. import android.os.Bundle
  392. import android.view.View
  393. import android.widget.Button
  394. import android.widget.EditText
  395. import androidx.appcompat.app.AppCompatActivity
  396. class UsuariosCrearActivity : AppCompatActivity() {
  397. private lateinit var celularEditText: EditText
  398. private lateinit var nombreEditText: EditText
  399. private lateinit var cargoEditText: EditText
  400. private lateinit var rolEditText: EditText
  401. private lateinit var guardarButton: Button
  402. private lateinit var dbHelper: DatabaseHelper
  403. override fun onCreate(savedInstanceState: Bundle?) {
  404. super.onCreate(savedInstanceState)
  405. setContentView(R.layout.activity_usuarios_crear)
  406. celularEditText = findViewById(R.id.editTextCelular)
  407. nombreEditText = findViewById(R.id.editTextNombre)
  408. cargoEditText = findViewById(R.id.editTextCargo)
  409. rolEditText = findViewById(R.id.editTextRol)
  410. guardarButton = findViewById(R.id.buttonGuardar)
  411. dbHelper = DatabaseHelper(this)
  412. guardarButton.setOnClickListener { guardarUsuario() }
  413. }
  414. private fun guardarUsuario() {
  415. val celular = celularEditText.text.toString().toDouble()
  416. val nombre = nombreEditText.text.toString()
  417. val cargo = cargoEditText.text.toString().toInt()
  418. val rol = rolEditText.text.toString().toInt()
  419. val db: SQLiteDatabase = dbHelper.writableDatabase
  420. val values = ContentValues().apply {
  421. put("celular", celular)
  422. put("nombre", nombre)
  423. put("cargo", cargo)
  424. put("rol", rol)
  425. }
  426. val newRowId = db.insert("usuario", null, values)
  427. db.close()
  428. if (newRowId != -1L) {
  429. // El usuario se guardó correctamente
  430. // Realizar cualquier acción adicional aquí, como mostrar un mensaje de éxito.
  431. finish()
  432. } else {
  433. // Ocurrió un error al guardar el usuario
  434. // Realizar cualquier acción adicional aquí, como mostrar un mensaje de error.
  435. }
  436. }
  437. }
  438. /******************************************************************************************/
  439. UsuariosListarActivity.kt
  440. package com.example.knbktlnbrd
  441. import android.os.Bundle
  442. import android.widget.ArrayAdapter
  443. import android.widget.ListView
  444. import androidx.appcompat.app.AppCompatActivity
  445. class UsuariosListarActivity : AppCompatActivity() {
  446. private lateinit var listaUsuarios: ListView
  447. override fun onCreate(savedInstanceState: Bundle?) {
  448. super.onCreate(savedInstanceState)
  449. setContentView(R.layout.activity_usuarios_listar)
  450. listaUsuarios = findViewById(R.id.listaUsuarios)
  451. // Obtener la lista de usuarios desde la base de datos (puedes adaptar esto según tu implementación)
  452. val usuarios = obtenerUsuarios()
  453. // Crear un adaptador para mostrar los usuarios en la lista
  454. val adapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, usuarios)
  455. // Asignar el adaptador a la lista
  456. listaUsuarios.adapter = adapter
  457. }
  458. private fun obtenerUsuarios(): List<String> {
  459. // Aquí debes implementar la lógica para obtener la lista de usuarios desde la base de datos
  460. // y devolverla como una lista de cadenas (puedes adaptar esto según tu implementación)
  461. return listOf("Usuario 1", "Usuario 2", "Usuario 3")
  462. }
  463. }
  464. /******************************************************************************************/
  465. UsuariosViewActivity.kt
  466. package com.example.knbktlnbrd
  467. import android.content.Intent
  468. import android.database.Cursor
  469. import android.database.sqlite.SQLiteDatabase
  470. import android.os.Bundle
  471. import android.view.Menu
  472. import android.view.MenuItem
  473. import androidx.appcompat.app.AppCompatActivity
  474. import androidx.recyclerview.widget.LinearLayoutManager
  475. import androidx.recyclerview.widget.RecyclerView
  476. class UsuariosViewActivity : AppCompatActivity() {
  477. private lateinit var recyclerView: RecyclerView
  478. private lateinit var adapter: UserAdapter
  479. private lateinit var dbHelper: DatabaseHelper
  480. override fun onCreate(savedInstanceState: Bundle?) {
  481. super.onCreate(savedInstanceState)
  482. //setContentView(R.layout.activity_usuarios_view)
  483. setContentView(R.layout.activity_usuarios_listar)
  484. //recyclerView = findViewById(R.id.recyclerView)
  485. recyclerView = findViewById(R.id.listaUsuarios)
  486. recyclerView.layoutManager = LinearLayoutManager(this)
  487. val databaseHelper = DatabaseHelper(this)
  488. val userList = databaseHelper.getAllUsers()
  489. adapter = UserAdapter(this, userList)
  490. //adapter = UserAdapter()
  491. adapter = UserAdapter(this, userList)
  492. recyclerView.adapter = adapter
  493. dbHelper = DatabaseHelper(this)
  494. loadUsers()
  495. }
  496. override fun onCreateOptionsMenu(menu: Menu): Boolean {
  497. menuInflater.inflate(R.menu.main_menu, menu)
  498. return true
  499. }
  500. override fun onOptionsItemSelected(item: MenuItem): Boolean {
  501. return when (item.itemId) {
  502. R.id.menu_add_project -> {
  503. openUsuariosCrearActivity()
  504. true
  505. }
  506. else -> super.onOptionsItemSelected(item)
  507. }
  508. }
  509. private fun loadUsers() {
  510. val db: SQLiteDatabase = dbHelper.readableDatabase
  511. val projection = arrayOf("celular", "nombre", "cargo", "rol")
  512. val cursor: Cursor = db.query(
  513. "usuario",
  514. projection,
  515. null,
  516. null,
  517. null,
  518. null,
  519. null
  520. )
  521. val users = mutableListOf<User>()
  522. while (cursor.moveToNext()) {
  523. val celular = cursor.getDouble(cursor.getColumnIndexOrThrow("celular"))
  524. val nombre = cursor.getString(cursor.getColumnIndexOrThrow("nombre"))
  525. val cargo = cursor.getInt(cursor.getColumnIndexOrThrow("cargo"))
  526. val rol = cursor.getInt(cursor.getColumnIndexOrThrow("rol"))
  527. val user = User(celular, nombre, cargo, rol)
  528. users.add(user)
  529. }
  530. cursor.close()
  531. db.close()
  532. adapter.setUsers(users)
  533. }
  534. private fun openUsuariosCrearActivity() {
  535. val intent = Intent(this, UsuariosCrearActivity::class.java)
  536. startActivity(intent)
  537. }
  538. }
lc8prwob

lc8prwob1#

正如@Tenfour4所说,你正在主线程上做一些数据库操作。主线程用于呈现UI人员和其他事情,你不应该做繁重的操作。因为你在主线程上执行了这个繁重的操作,所以你会得到一个[ANR][1]
因为我知道你在这方面没有很大的经验,我建议你检查解释什么是背景线程的文章,它们是如何工作的,为什么你需要它们,一个例子是:
https://ghanimkhan.medium.com/android-background-thread-explained-easily-9039be3521d6
它也有一个视频,如果你遵循它,并理解它,你也会解决你的问题。

相关问题