2011-01-17 7 views
0

Ich würde gerne wissen, wenn es ein Problem mit dem Aufruf eines sharedPreference -Wert auf eine AppWidget-Provider-Klasse, so dass ich es für ein Update verwenden kann. Ich habe diesen Code, den ich auf einer Methode in der AppWidget-Provider-Klasse aufrufen, aber es gibt mir Kompilierungsfehler und ich sollte eine Methode dafür erstellen. Dies ist der Code:Aufruf von SharedPreferences auf AppWidget

prefs = getSharedPreference("myPrefs", Context.MODE_PRIVATE); 

dies ist ein bekanntes Problem und gibt es eine andere Art, wie ich den Wert meiner Konfigurationsklasse passieren kann, wenn dies nicht möglich ist.

Antwort

1

AppWidgetProvider s sind nicht Context s, und haben daher keinen Zugriff zu getSharedPreferences().

Es ist eine Standardmethode Präferenzen für AppWidgets zu setzen, aber die auf der Android-Entwicklerwebsite dokumentiert ist: http://developer.android.com/guide/topics/appwidgets/index.html#Configuring

Die Grundidee ist, dass Sie das System anweisen, eine Aktivität zu starten, wenn der Benutzer angibt, sie wollen um dein Widget zu konfigurieren. Der Konfigurationsbildschirm ist offensichtlich ein Activity, so dass er unter anderem Zugriff auf SharedPreferences hat. Sie führen dann alle Ihre Konfiguration dort durch und aktualisieren manuell die AppWidget, deren ID beim Start Intent übergeben wurde. Schauen Sie sich unbedingt den obigen Link an, um die notwendigen Schritte zu sehen.

Siehe auch http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/appwidget/ExampleAppWidgetConfigure.html für einen tatsächlichen Quellcode Beispiel.

+0

oh richtig, danke! Ich werde manchmal mit Kontexten verwirrt. – Rexx

+0

Kein Problem; Ich habe noch viel über Android zu lernen. Prost! – WorkerThread

0

Es klingt, als würden Sie es nicht mit Context initialisieren. Der Aufruf getSharedPreference geht von this.getSharedPreference aus, was möglicherweise nicht korrekt ist.

In welcher Klasse nennen Sie dies und vielleicht könnten Sie mehr Quellcode zur Verfügung stellen.

Wenn ich aber zu erraten wäre, würde ich sagen, dass Sie beheben können, ist wie folgt:

prefs = getContext().getSharedPreference("myPrefs", Context.MODE_PRIVATE); 

oder vielleicht:

prefs = getApplicationContext().getSharedPreference("myPrefs", Context.MODE_PRIVATE); 

oder wenn Sie haben Zugang zu einem View-Klasse:

prefs = view.getContext().getSharedPreference("myPrefs", Context.MODE_PRIVATE); 
+0

nein. sie funktionieren auch nicht. danke trotzdem – Rexx