Przechowuję globalną zmienną, która jest potrzebna w działaniach w mojej aplikacji na Androida, używając podklasy android.app.Application zgodnie z wyjaśnieniem Soonil (w How to declare global variables in Android?).Nie można utworzyć statycznego odwołania do metody niestatycznej (Android getApplicationContext())
Podejście wygląda tak:
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();
...
}
}
Do tego momentu, podejście to działało w porządku dostępu zmienną globalną z jednego z moich działań. Ale dziś przy użyciu tej samej metody, mam następujący błąd:
Cannot make a static reference to the non-static method getApplicationContext()
from the type ContextWrapper
Kluczową różnicą jest to, że jeszcze przed nowym aktywny jest rzeczywiście fragment (SherlockFragmentActivity, aby być dokładne).
Wszelkie pomysły, dlaczego nie mogę uzyskać dostępu do AppState, tak jak poprzednio, i czy istnieje dobre obejście tego problemu?
Wielkie dzięki.
EDYCJA: Dobra haczyk, Matt B. Okazuje się, że miejsce, które faktycznie nazywam getApplicationContext() jest wewnątrz innej klasy. Oto punkt powołanie:
public class MyActivity extends SherlockFragmentActivity {
public static class AccountListFragment extends SherlockListFragment {
MyApp appState = ((MyApp)getApplicationContext());
...
}
...
}
Ponadto, jak wskazano poniżej, błąd odszedł kiedy zmienił wezwanie do
MyApp appState = ((MyApp)getActivity().getApplicationContext());
Can widzimy rzeczywisty kod, który masz w swojej działalności, który rozszerza SherlockFragmentActivity? EDYCJA: Próbowałem 'Application appState = ((Application) getApplicationContext());' w moim 'SherlockFragmentActivity' i kompiluje się dobrze. –
Nie widzę, gdzie w tym przykładzie kodu próbujesz utworzyć statyczne odwołanie do tej metody. Czy jesteś pewien, że wysłałeś prawidłowe wiersze? –
czy możesz zaznaczyć odpowiedź jako poprawną? – vanleeuwenbram