PDA

Ver la Versión Completa : [ CONSULTA ] Array con elementos referenciados


goltara
15/09/12, 15:41:53
Hola buenos dias,

Me ha surgido un problema a la hora de hacer un array con elementos referenciados, el problema es el siguiente:

yo quiero tener un array con elementos referenciados en una clase.

public class Datos extends Activity{

String [] datos = {
(String)this.getString(R.string.text000).toString( ),
(String)this.getString(R.string.text001).toString( ),
(String)this.getString(R.string.text002).toString( ),
(String)this.getString(R.string.text003).toString( ),
(String)this.getString(R.string.text004).toString( ),
(String)this.getString(R.string.text005).toString( ),
(String)this.getString(R.string.text006).toString( ),
(String)this.getString(R.string.text007).toString( ),
(String)this.getString(R.string.text008).toString( ),
(String)this.getString(R.string.text009).toString( ),
(String)this.getString(R.string.text010).toString( ),

};


}En otra clase quiero llamar a estos Strings de la siguiente forma:

public class MiClase{

Datos dat = new Datos();
Random ran = new Random();
int x= ran.NextInt(10);

String a =(String) dat.datos[x].toString();

}Al ejecutar el codigo me da un NullPointException en la linea del String y no se como hacer para que este problema se solucione.

También he probado en hacer un array de enteros y pasarle el entero de la referencia y en la otra clase llamar al metodo getString(); pero no me sirve, me sale tambien el NullPointException

Espero que me podais ayudar. Un saludo !!!!

Arasthel
15/09/12, 15:48:11
Si no me equivoco te falta un public al declarar la variable datos en Datos. El NullPointException vendría porque no se puede acceder a dat.datos. Es posible que por eso hayas tenido que hacer el cast a String y el toString, ya que si fuera público el programa sabría inmediatamente que el contenido de dat.datos es todo String.

EDIT: acabo de ver el código para crear el Array. ¿Por qué tanto cast y toString()? Con un getString() ya debería de devolverte un String sin necesidad de todo ese código. Además, no estoy totalmente seguro de que puedas cargar recursos con getString sin que la Activity haya empezado un onCreate()...

Un saludo.

mocelet
15/09/12, 15:59:09
Correcto, getString le devuelve null porque una Activity nunca se crea con new... solo se inician con intents.

Como está no hay contexto inicializado.

goltara
15/09/12, 16:19:50
Entonces, que puedo hacer para que se pueda crear un array de Strings con Strings referenciados??

mocelet
15/09/12, 16:43:43
Muy fácil, en vez de un array de String haces un array de int donde guardas los identificadores, que esos se generan al compilar y son constantes.

En la actividad que quieras usarlos (o en cualquier método donde tengas acceso a un objeto Context inicializado), en vez de sacar un String sacas el id guardado en int[] y llamas al getString(id) para obtener el String deseado.

goltara
15/09/12, 16:54:48
Eso que dices tambien lo he probado, he generado el siguiente codigo

public class Datos extends Activity{

int [] datos = {
R.string.text000,
R.string.text001,
R.string.text002,
R.string.text003,
R.string.text004,
};


}:

public class MiClase{

Datos dat = new Datos();
Random ran = new Random();
int x= ran.NextInt(5);

String a =(String) getString((int)dat.datos[x]);

}y me vuelve a salir un NullPointException

Alguna otra sugerencia??

Gracias por vuestras respuestas!!!

mocelet
15/09/12, 16:59:03
Las actividades no se crean con new, y al getString no lo llamas desde una actividad o desde un contexto inicializado.

goltara
15/09/12, 21:41:18
Ya he conseguido arreglarlo al final tu solución me ha servido, muchas gracias!!!!