2009-11-29 6 views
11

Dans une classe d'utilitaires Android, je souhaite obtenir une valeur de préférence système dans une classe, mais je n'ai pas le contexte ici, car la classe qui l'appelle n'a pas le contexte soit. J'ai trouvé que pour les ressources on peut utiliser la fonction Resources.getSystem() statique. Existe-t-il un moyen similaire d'obtenir des préférences système sans contexte?Obtention des préférences système Android sans contexte

Ma classe n'est pas une activité ou un service. C'est une classe d'utilité. Pourrait donner plus d'informations si nécessaire.

+0

Par curiosité, je suis dans la même situation que vous maintenant. L'esprit jette un peu de lumière sur ce que vous avez finalement décidé? – camperdave

Répondre

7

Vous devez lui envoyer un contexte - n'essayez pas de fuir vos responsabilités. :) Votre classe d'utilitaires doit être appelée par une activité ou un service à un certain niveau, et vous allez passer ce contexte tout au long de la ligne, à travers chaque appel de méthode. Je sais que c'est agaçant, j'ai dû faire des choses similaires moi-même. Considérez cela comme une incitation à garder votre code simple et à exiger le moins d'appels de méthodes possible pour accomplir quelque chose.

+0

Non, ce n'est pas de la paresse. Je personnalise tout Android, et cette classe est appelée par un cours interne Android qui n'a pas de contexte. – Mostafa

+6

Ensuite, les préférences ne sont pas ce que vous voulez utiliser pour stocker les informations. Les préférences sont limitées aux applications/activités. Stocker les informations sur le disque à la place. – Konklone

+0

Merci. Cela peut aider. Je devrais vérifier. – Mostafa

-1

J'utilise le hack suivant: http://www.hasemanonmobile.com/2009/10/05/quick-and-very-dirty-android-development-trick/

Essentiellement, vous Stash un pointeur hors contexte comme une variable statique à l'intérieur de votre activité. Je recommande seulement ce hack laid si vous êtes dans un délai serré. En outre, si vous écrivez une classe utilitaire, vous devriez probablement exiger (comme l'exigent de nombreux utilitaires Android) que l'application appelante vous fournisse un contexte dans le cadre de votre constructeur.

+0

Pensez que c'est un lien pourri là :) – t0mm13b

-3

Vous pouvez créer un contexte:

Context myContext = createPackageContext("com.example", 0); 
+4

S'il vous plaît ajouter des commentaires, lorsque vous downvote cette réponse. Nous pouvons donc apprendre pourquoi ce n'est pas une bonne solution. – kuester2000

+3

'createPackageContext()' est une méthode non statique sur 'Context', donc vous devez déjà avoir un' Context' pour l'appeler. Son problème est qu'il ne veut pas vous obliger à passer un objet contextuel partout si tout ce que vous voulez faire est d'accéder aux ressources du système. –

Questions connexes