Ich habe eine globale Variable gespeichert, die über Aktivitäten in meiner Android-App benötigt wird, indem ich eine Unterklasse von android.app.Application wie von Soonil (in How to declare global variables in Android?).Konnte keinen statischen Verweis auf nicht statische Methode machen (Android getApplicationContext())
Der Ansatz sieht wie folgt aus:
class MyApp extends Application {
private String myState;
public String getState(){
return myState;
}
public void setState(String s){
myState = s;
}
}
class Blah extends Activity {
@Override
public void onCreate(Bundle b){
...
MyApp appState = ((MyApp)getApplicationContext());
String state = appState.getState();
...
}
}
Bis zu diesem Punkt ist dieser Ansatz für den Zugriff auf die globale Variable von jedem meiner Aktivitäten fein gearbeitet hat. Aber heute mit dem gleichen Ansatz, bekam ich folgende Fehlermeldung:
Cannot make a static reference to the non-static method getApplicationContext()
from the type ContextWrapper
Der wesentliche Unterschied von vor ist, dass die neue Aktivität ist eigentlich ein Fragment (SherlockFragmentActivity, um genau zu sein).
Irgendwelche Ideen, warum kann ich nicht wie zuvor appState zugreifen, und gibt es eine gute Problemumgehung?
Vielen Dank.
EDIT: Guter Fang, es Matt B. dreht den Ort heraus ich getApplicationContext tatsächlich() aufrufen, innerhalb einer anderen Klasse ist. Hier ist der anrufende Punkt:
public class MyActivity extends SherlockFragmentActivity {
public static class AccountListFragment extends SherlockListFragment {
MyApp appState = ((MyApp)getApplicationContext());
...
}
...
}
Auch, wie unten erwähnt, der Fehler ging weg, als ich den Anruf zu
geändertMyApp appState = ((MyApp)getActivity().getApplicationContext());
(auch wenn Sie es „Aktivität“ genannt) Can Wir sehen den tatsächlichen Code, den Sie in Ihrer Aktivität haben, der SherlockFragmentActivity erweitert? EDIT: Ich habe versucht 'Application appState = ((Application) getApplicationContext());' in meinem 'SherlockFragmentActivity' und es kompiliert einfach gut. –
Ich sehe nicht, wo in diesem Codebeispiel versucht wird, eine statische Referenz auf diese Methode zu erstellen. Sind Sie sicher, dass Sie die richtigen Zeilen geschrieben haben? –
kannst du dann bitte die antwort als richtig markieren? – vanleeuwenbram