2009-11-29 10 views
11

En una clase de utilidad de Android, quiero obtener un valor de preferencia del sistema en una clase, pero no tengo el contexto allí, porque la clase que lo llama no tiene el contexto tampoco. Descubrí que para Recursos se puede usar la función estática Resources.getSystem(). ¿Hay alguna manera similar de obtener preferencias del sistema sin contexto?Obtener las preferencias del sistema de Android sin tener ningún contexto

Mi clase no es una actividad ni un servicio. Es una clase de utilidad. Podría dar más información si es necesario.

+0

Por curiosidad, estoy exactamente en la misma situación que ahora. ¿Te importa arrojar un poco de luz sobre lo que finalmente decidiste? – camperdave

Respuesta

7

Tienes que enviar un Contexto, no intentes huir de tus responsabilidades. :) Su clase de servicios públicos debe recibir una llamada de una Actividad o Servicio en algún nivel, y usted deberá pasar ese Contexto a lo largo de la línea, a través de cada llamada a un método. Sé que es molesto, he tenido que hacer cosas similares yo mismo. Considéralo un incentivo para mantener tu código simple y para requerir la menor cantidad posible de llamadas de método para lograr algo.

+0

No, no se trata de pereza. Estoy personalizando todo el Android, y esta clase es llamada por una clase interna de Android que no tiene contexto. – Mostafa

+6

Entonces las preferencias no son lo que quiere usar para almacenar la información. Las preferencias tienen un alcance para aplicaciones/actividades. Almacene la información en el disco en su lugar. – Konklone

+0

Gracias. Eso puede ayudar. Debería chequear – Mostafa

-1

que utilizar este truco: http://www.hasemanonmobile.com/2009/10/05/quick-and-very-dirty-android-development-trick/

Esencialmente STASH fuera un puntero contexto como una variable estática dentro de su actividad. Solo recomendaría este feo truco si tienes un plazo ajustado.

Además, si está escribiendo una clase de utilidad, probablemente debería requerir (como lo requieren muchas utilidades de Android) que la aplicación de llamada le proporcione un contexto como parte de su constructor.

+0

Piensa que es un enlace podrido :) :) – t0mm13b

-3

Se puede crear un contexto:

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

Por favor, agrega comentarios cuando desestime esta respuesta. Entonces podemos aprender por qué esta no es una buena solución. – kuester2000

+3

'createPackageContext()' es un método no estático en 'Context', por lo tanto, debe tener un' Context' para llamarlo. Su problema es que no quiere exigirle que pase un objeto contextual por todas partes si lo único que quiere hacer es acceder a los recursos del sistema. –

Cuestiones relacionadas