2010-11-07 13 views
1

Je définis une classe qui définit un attribut Drawable dans un objet. Le problème est que je ne peux pas accéder à la méthode getResource().getDrawable(int resourceId) sauf si j'ai un Context. Ce que je faisais était d'envoyer à cette classe une instance d'activité (appelons-le « agir »), puis je l'ai fait:Accès à des ressources Drawable à partir d'une classe non contextuelle

act.getResources().getDrawable(R.drawable.whellchair)

mais, lors de l'exécution de cette ligne, il jette un NullPointerException.

Quand idée comment accomplir ceci?

+5

Est-ce que "act" est nul ou est "act.getResources()" null? – Juhani

+0

Salut mec! Vous venez de donner l'indice critique! Je n'ai pas vérifié ce qui était nul et il s'est avéré que c'était "acte". Je travaille avec un singleton quand mettre la ligne au mauvais endroit! Merci;) –

Répondre

1

J'ai trouvé le problème! J'utilise un singleton et je mis la ligne d'accéder au « acte » dans une méthode statique ... comment fou de moi ...

Désolé et merci Juhani pour le commentaire :)

0

Passe que le contexte d'application au constructeur de votre classe. Dans la classe application principale, vous obtenez simplement le contexte en appelant la méthode getApplication() si vous avez besoin du contexte de prise de conscience de vie ou getApplicationContext() si vous avez besoin d'un contexte lié au processus en cours.

Exemple:

private Context ctx = getApplication(); 

... some code ... 

MyClass myClass = new MyClass(ctx); 

Votre constructeur de classes de cours doit gérer le contexte en conséquence (à savoir la fixation d'un membre privé de type Contexte de la valeur passée) comme celui-ci.

private Context ctx = null; 

public MyClass(ctx) { 
    this.ctx = ctx; 
} 

Ensuite, vous pouvez utiliser le contexte pour tout ce dont vous avez besoin.

+0

la classe est un singleton (donc elle instancie selfs) et elle ne prolonge pas la classe Activity pour avoir accès à getApplication() ou getApplicationContext() –

+0

Bien une classe n'a pas besoin d'étendre Activity pour obtenir le Correctement le contexte (même si cela s'appelle getApplication(), il obtiendrait le mauvais contexte le plus probable étant donné que vous voulez afficher des choses et obtenir des choses dans l'activité principale la plupart du temps). Mais apparemment, vous avez résolu votre problème de toute façon, tout va bien. –