2012-06-01 12 views
7

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()); 
+0

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

+0

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

+0

czy możesz zaznaczyć odpowiedź jako poprawną? – vanleeuwenbram

Odpowiedz

4
getActivity().getApplication() 

powinno działać dobrze.

Najpierw trzeba odniesienie do aktywności, a następnie do wniosku

Różnica polega na tym, że są teraz wywołanie tej funkcji z fragmentu (mimo że nazwał ją „aktywny”) zamiast Aktywny

+0

Zgodnie z jego pytaniem mówi, że jest to SherlockFragmentActivity. Jeśli w rzeczywistości oznacza SherlockFragment, twoja odpowiedź może być poprawna. –

+0

"nowa aktywność jest w rzeczywistości Fragmentem (a dokładniej SherlockFragmentActivity)." Rozumiem, że nazwał swój fragment "SherlockFragmentActivity" – vanleeuwenbram

+0

Dziękuję, to chyba usunęło błąd! Żeby było jasne, czy wiesz, dlaczego w tym przypadku muszę dodać wywołanie getActivity() (z wewnątrz SherlockFragmentActivity), ale nie wcześniej (z wewnątrz normalnej aktywności)? – gcl1

Powiązane problemy