2009-11-29 14 views
11

In una classe di utilità Android, voglio ottenere un valore di preferenza di sistema in una classe, ma non ho il contesto lì, perché la classe che lo chiama non ha il contesto Ho scoperto che per le risorse si può usare la funzione statica Resources.getSystem(). C'è un modo simile per ottenere le preferenze di sistema senza contesto?Ottenere le preferenze di sistema di Android senza alcun contesto

La mia classe non è un'attività né un servizio. È una classe di utilità. Potrebbe dare più informazioni se necessario.

+0

Per curiosità, mi trovo nella situazione esattamente lo stesso come ora. La mente getta un po 'di luce su ciò che alla fine hai deciso? – camperdave

risposta

7

Devi inviarlo un contesto: non cercare di scappare dalle tue responsabilità. :) La tua classe di utilità deve essere richiamata da un'attività o servizio a un certo livello e avrai passato il contesto fino in fondo alla linea, attraverso ogni chiamata di metodo. So che è fastidioso, ho dovuto fare cose simili da solo. Consideralo un incentivo per mantenere il tuo codice semplice e per richiedere il minor numero possibile di chiamate di metodo per ottenere qualcosa.

+0

No, non si tratta di pigrizia. Sto personalizzando l'intero Android, e questa classe è chiamata da una classe interna di Android che non ha un contesto. – Mostafa

+6

Quindi le preferenze non sono quelle che si desidera utilizzare per memorizzare le informazioni. Le preferenze riguardano le applicazioni/attività. Archivia invece le informazioni su disco. – Konklone

+0

Grazie. Questo può aiutare. Dovrei controllare – Mostafa

-1

Io uso il seguente Hack: http://www.hasemanonmobile.com/2009/10/05/quick-and-very-dirty-android-development-trick/

In sostanza si stash fuori un puntatore di contesto come una variabile statica all'interno della vostra attività. Ti consiglierei questo brutto trucco se hai una scadenza molto ravvicinata.

Inoltre, se si sta scrivendo una classe di utilità, è probabile che sia necessario (come richiesto da molte utilità Android) che l'applicazione chiamante fornisca un contesto come parte del costruttore.

+0

Pensa che si tratta di un collegamento marcescente lì :) – t0mm13b

-3

È possibile creare un contesto:

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

Aggiungi commenti quando sottostanti questa risposta. Quindi possiamo imparare perché questa non è una buona soluzione. – kuester2000

+3

'createPackageContext()' è un metodo non statico su 'Context', quindi è necessario avere un' Context' già per chiamarlo. Il suo problema è che non vuole richiedere il passaggio di un oggetto di contesto ovunque, se tutto ciò che si vuole fare è accedere alle risorse di sistema. –

Problemi correlati