El mensaje de error que dice:
Variable is accessed within inner class. Needs to be declared final
Es un error de Java que seguramente más de una vez ha aparecido.
En este caso vamos a ver cómo solucionar este problema al programar en Android usando Java, pero igualmente aplica a otras cosas, pues el lenguaje es Java en todos los casos.
Declara la variable como final, y ya está. Es decir, si tenías un String
definido así:
String nombre = "Luis";
Ahora defínelo así:
final String nombre = "Luis";
No vas a poder cambiar ese valor más tarde, pero sí podrás acceder a él desde clases anónimas y el problema estará resuelto.
El ejemplo de arriba funciona si no quieres cambiar el valor del objeto. En caso de que quieras cambiarlo, la solución es usar un arreglo.
Siguiendo el ejemplo anterior, ahora declara un arreglo de String
, usando final
:
final String[] nombre = {"Luis"};
Después, podrás modificar al arreglo:
nombre[0] = "Parzibyte";
Así podrías hacerlo con cualquier tipo de dato, simplemente declarando un arreglo de un elemento. También podrás acceder al mismo.
Ahora veamos otra solución, la cual es declarar la variable como una variable de instancia. En idioma español, quiere decir que declaremos las variables como miembros de la clase. Así:
Después, dentro de cualquier método y cualquier clase anónima podrás acceder y cambiar la variable.
Hice este post después de investigar sobre las variables de instancia y todo ello, pues estaba intentando acceder a una lista de gastos de tipo List<Gasto>
, la cual estaba definida en el método onViewCreated
.
Más abajo, al agregar un ClickListener de un elemento, quería recuperar el gasto así:
Gasto gasto = gastos.get(indice);
El problema era que tenía que declarar la variable como final
, cosa que no quise hacer. Por lo tanto, saqué la variable gastos del método onViewCreated
y el problema se arregló. Es decir, la puse como miembro de la clase.
En el ejemplo omití los import
s y algunas cosas para explicar la solución. Así es como el error que dice…
Variable is accessed within inner class. Needs to be declared final
… desaparece
Aprovechando esto, te invito a ver un CRUD de SQLite con Android.
En ocasiones es necesario leer los pixeles y colores de una imagen con JavaScript del…
Siguiendo con los tutoriales de listas desplegables o select con JavaScript, vamos a ver cómo…
Hoy vamos a ver programar la impresión de un PDF generado a partir de HTML…
En este tutorial básico de JavaScript con HTML vamos a ver cómo llenar una lista…
En este artículo se presenta una guía para imprimir un PDF a partir de una…
En este post voy a enseñarte cómo imprimir un PDF a partir de su representación…
Esta web usa cookies.