MartinezCristianD / IMC

segundo proyecto ANDROID con Kotlin
0 stars 0 forks source link

Crash when user click button without put the info #4

Closed davidburgos closed 3 years ago

davidburgos commented 3 years ago

Si el usuario le da click al botón sin haber puesto ni el peso ni la altura, la aplicación se cierra. Si miro el mensaje del error en AS en el logcat, me manda a la linea 40 de MainActivity (MainActivity.kt:40) con el error

java.lang.NumberFormatException: empty String

Que vendría siendo ésta línea:

weigth = weigthView.text.toString().toDouble()

Tendría sentido porque weigthView.text.toString() está vacío porque el usuario no digitó nada, y el siguiente comando sería convertir a double ese vacío.

Una posible solución podría ser hacer una valicación antes de hacer el cálculo, algo como:

if (!weigthView.text.isNullOrEmpty()) { weigth = weigthView.text.toString().toDouble() }

La recomendación es que siempre que se necesite un valor del usuario (nombre, edad etc...) validar si cuando le dió click al botón, en verdad digitó un valor que sea válido

MartinezCristianD commented 3 years ago

profe buena noche, muchas gracias por la ayuda y las recomendaciones, estuve trabajando en ellas y creo haberlas solucionado, hice el commit fix null bug con las correcciones, y siento que debo empezar a prestar mayor atención al detalle, como en el de adicionar un nuevo id con el @+id que se me fue en los constrains y las líneas que no quedaron incluidas en los xml de dimens, pero trataba de dar forma lo mas rápido posible y luego con mas tiempo pulir el código pero se quedan cosas en el aire creo que mejor irlo haciendo todo como debe ser desde el principio, igual que el nombre del activity tuve varios problemas para cambiar el nombre ahora; de nuevo le agradezco demasiado toda la ayuda, por poner de su parte y sacar el tiempo para poder enseñarme, cada cosa que aprendo me acerca mas al objetivo.

davidburgos commented 3 years ago

Que bien eso noté, incluso incluyó la traducción al inglés por separado 👏 lo de los @+id/ se agregan automáticamente por el IDE, debe ser un error que tienen, si uno modifica los constraints en la parte visual, AS agrega el constraint agregandole el + no sé porqué 🤷🏻‍♂️

La validación quedó buena, ya intenté hacerlo fallar si sale Not Valid 👍 toca hacer el código a prueba de fallas, por lo menos eso le van a pedir en un proyecto real. La idea de hacerle ver todos esos detallitos es para que los vaya interiorizando, cosa que a lo último lo haga sin pensarlo.

Sugerencias

  1. El cambiar el nombre de una activity a mano implicaba hacer más cosas, como modifcar un archivo llamado AndroidManifest.xml, tener en cuenta que si cambió el layout toca también cambiarlo en la clase de kotlin porque allá se utilizó etc... AS hace eso automático si uno le da click derecho a la variable o clase que quiere cambiar y refactor -> rename Lo único a tener en cuenta es que la convención dice que si se crea una clase nueva o se le cambia el nombre, la idea es que empiece siempre con mayúsculas, begining -> Begining

  2. Una pequeña optimización que noté, en MainActivity.kt se declaró la variable noOp en la linea 14, se asignó en la linea 48 y se usa solamente en la línea 60, si una variable se crea y se usa en sólo una parte no tiene mucho sentido crearla, la línea 60 podría quedar fácilmente así:

    else -> {resultView.text = getString(R.string.noOp)}

Ahora si la variable noOp si se va autilizar en otra parte en la case, si valdría la pena mantenerla.

No quiere decir que esas sugerencias sean obligatorias de hacer, pero serían comentarios que en el proyecto nos hacemos continuamente, la idea es aconstumbrarlo a ud desde ya, así si entra a un proyecto, ya tendría idea a que se puede enfrentar.

davidburgos commented 3 years ago

Problema del crash resuelto, dejaré el issue como cerrado.