2012-06-01 9 views
7

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ändert
MyApp appState = ((MyApp)getActivity().getApplicationContext()); 
+0

(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. –

+0

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? –

+0

kannst du dann bitte die antwort als richtig markieren? – vanleeuwenbram

Antwort

4
getActivity().getApplication() 

sollte gut funktionieren.

Sie müssen zuerst einen Verweis auf Aktivität, dann auf die Anwendung

Der Unterschied ist, dass Sie jetzt diese Funktion von einem Fragment fordern anstelle einer Aktivität

+0

Entsprechend seiner Frage sagt er, dass es eine SherlockFragmentActivity ist. Wenn er tatsächlich SherlockFragment meint, dann ist deine Antwort vielleicht richtig. –

+0

"neue Aktivität ist eigentlich ein Fragment (SherlockFragmentActivity, um genau zu sein)." Ich verstehe, dass er sein Fragment "SherlockFragmentActivity" nannte – vanleeuwenbram

+0

Danke, das scheint den Fehler geklärt zu haben! Um klar zu sein, wissen Sie, warum ich den Aufruf von getActivity() in diesem Fall hinzufügen muss (aus einer SherlockFragmentActivity), aber nicht vorher (aus einer normalen Aktivität)? – gcl1