2012-11-18 1 views
4

J'ai déclaré quelques valeurs entières dans un fichier XML et j'ai besoin d'utiliser les valeurs d'une classe pour définir la taille du tableau d'un objet.android R.integer renvoie incorrect Extrêmement grande valeur provoquant un manque de mémoire lors de la création du tableau

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <!--  Default Object Count --> 
    <item format="integer" name="item1" type="integer">3</item> 
    <item format="integer" name="item2" type="integer">1</item> 
    <item format="integer" name="item3" type="integer">1</item> 
</resources> 

J'utilise les valeurs ci-dessus dans ma classe comme suit

public class InitialiseObjects { 
    // For now static number of objects initialized 
    private String TAG = "INIT_OBJECTS"; 
    int ITEM1_COUNT = R.integer.item1; 
    int ITEM2_COUNT = R.integer.item2; 
    int ITEM3_COUNT = R.integer.item3; 

    private Item1[] item1Objs = new Item1[ITEM1_COUNT]; 
    private Item2[] item2Objs = new Item2[ITEM2_COUNT]; 
    private Item3[] item3Objs = new Item3[ITEM3_COUNT]; 
} 

j'attends ARTICLE * _count être 3,1,1 respectivement pour les articles 1,2,3. Cependant, je reçois 2131034112, 2131034113, 2131034114 respectivement

Quel est le problème ici?

Android 2.2 [API-8] est utilisé

Répondre

10

R.integer.item1 est l'ID de la ressource, et donc une très grande et entier arbitraire.

La valeur que vous cherchez est getContext().getResources().getInteger(R.integer.item1);

Ainsi, vous ne serez pas en mesure de les obtenir dans un code statique.

Vous devez utiliser l'initialisation paresseuse dans votre code:

private Item1[] item1Objs; 
public Item1[] getItem1Array(Context context) { 
    if (item1Objs == null) { 
    int count = context.getResources().getInteger(R.integer.item1); 
    item1Objs = new Item1[count]; 
    } 
    return item1Objs; 
} 
+0

Merci http://stackoverflow.com/users/1620937/orabig, je ne vois aucune mention spécifique sur les 'R.integer. 'renvoyer un ID entier dans la documentation. A également été en train de charger bitmaps 'BitmapFactory.decodeResource (context.getResources(), R.drawable.myimage)' et pensé 'R. . 'retourne l'objet associé – Anshul

1

La raison en est que toute R.integer * est une valeur entière généré, il est comme un identifiant qui est lié à votre valeur déclarée en xml

.

Vous devriez plutôt appeler

getResources().getInteger(R.integer.*); 
Questions connexes