2012-06-01 17 views
7

Soonil tarafından açıklandığı gibi android.app.Application alt sınıfını kullanarak Android uygulamamdaki Etkinlikler arasında gereken genel bir değişkeni saklıyorum (How to declare global variables in Android?).Statik olmayan yönteme statik başvuru yapamazsınız (Android getApplicationContext())

yaklaşım şu şekildedir:

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(); 
    ... 
    } 
} 

Bu noktaya kadar, bu yaklaşım benim Faaliyetleri herhangi birinden küresel değişkeni erişmek için ince çalıştı. Ama bugün aynı yaklaşımı kullanarak, aşağıdaki hata var:

Cannot make a static reference to the non-static method getApplicationContext() 
from the type ContextWrapper 

önce gelen temel fark yeni Aktivite bir Parça (SherlockFragmentActivity, kesin olarak) aslında olmasıdır.

Daha önce sahip olduğum gibi, appState'e neden erişemediğim hakkında herhangi bir fikir var mı?

Çok teşekkürler.


DÜZENLEME: İyi yakalamak Matt B. başka bir sınıfın içinde olduğu Aslında getApplicationContext çağırıyorum yeri() çıkıyor. İşte çağıran nokta: aşağıda belirtildiği gibi ben sadece iyi çalışması gerekir

MyApp appState = ((MyApp)getActivity().getApplicationContext()); 
+0

Can Etkinliğinizde, SherlockFragmentActivity'i genişleten gerçek kodu görüyoruz. DÜZENLEME: Uyguladığım appState = ((Uygulama) getApplicationContext()); 'SherlockFragmentActivity' içinde denedim ve sadece iyi derler. –

+0

Bu kod örneğinde, bu yönteme statik bir başvuru yapmaya çalıştığınız yeri göremiyorum. Doğru satırları gönderdiğinizden emin misiniz? –

+0

daha sonra cevabı doğru olarak işaretleyebilir misiniz? – vanleeuwenbram

cevap

4
getActivity().getApplication() 

çağrısını değiştiği

public class MyActivity extends SherlockFragmentActivity { 
    public static class AccountListFragment extends SherlockListFragment { 
     MyApp appState = ((MyApp)getApplicationContext()); 
     ... 
    } 
    ... 
} 

Ayrıca, hata gitti.

Önce ardından uygulamaya faaliyet bir başvuru ihtiyaç

fark, artık yerine Faaliyet (siz "Etkinlik" koydu olsa bile) Fragment bu işlevini çağırarak olmasıdır

+0

Onun sorusuna göre bir SherlockFragmentActivity olduğunu söylüyor. Eğer gerçekten SherlockFragment anlamına gelirse, cevabınız doğru olabilir. –

+0

"yeni Etkinlik aslında bir Fragmedir (Kesin olmak için SherlockFragmentActivity)." "SherlockFragmentActivity" parçasını "SherlockFragmentActivity" ismini verdiğini biliyorum – vanleeuwenbram

+0

Teşekkür ederim, bu hatayı temizlemiş gibi görünüyor! Ancak açık olmak gerekirse, neden bu durumda getActivity() çağrısını (bir SherlockFragmentActivity içinden) eklemeliyim, fakat daha önce (normal bir Aktivitenin içinden) neden eklemem gerekiyor? – gcl1

İlgili konular