2009-10-09 23 views
11

Aynı uygulama içinde, ancak farklı bir paket içinde olan bir aktivitede aşağıdaki satırı çalıştırıyorum:Android: this.getApplication() NULL işaretçisini döndürür

AppObject appObj = (AppObject)this.getApplication(); 
// FYI: AppObject is my extension class of Application. 

"Ana" pakete taşıdığımda sadece bir boş gösterici döndürür ve oradan çalıştırın, başvuru referansını beklendiği gibi döndürür.

AndroidManifest.xml adresindeki aktiviteyi tam bir sınıf adıyla tanımladım, çünkü başka bir pakette: <activity android:name="com.foo.bar.TestActivity"></activity>

Ne yapmam gerektiğine dair bir fikrim var mı?


Güncelleme:android:name="AppObject"'in altında bir soruda önerildiği gibi, android:name="AppObject", AndroidManifest.xml

'in <application> etiketinde zaten vardı

cevap

4

arasında <application> etiketinde zaten senin Uygun paket adıyla Uygulamadan genişletilen sınıf adı. Uygulama etiket google docs, küresel uygulama durumunu korumak için ihtiyacı olanlar için Taban sınıfının başı olarak

<application android:name=".AppObject"> 


. AndroidManifest.xml etiketinde adını belirterek kendi uygulamanızı sağlayabilirsiniz. Bu, uygulama/paketiniz için işlem oluşturulduğunda bu sınıfın sizin için oluşturulmasına neden olur.

here

+1

Üzgünüm, bu soruda bahsetmeyi unuttum. Ama bunu zaten Manifest'imde yaptım. – znq

1

Sadece aynı şey girmek benim kod hala aynı sorunu var ben bu sanırım, onCreate() gitmeli yapıcı yerel mApplication değişken ayarlama olduğunu fark ettim refactored ettikten Bildiride bulunan tüm nesneler, önce getApplication() kurulduktan sonra oluşturulabilir, böylece 'u onCreate() arandığında veya sonra aramanız gerekir. Bunun farklı paketler için işe yarayıp yaramadığını görmek için tüm kodlarımı tekrar geri almayın (iç çekiş).

20

Yapıcıda değil, etkinliğin onCreate() yönteminde getApllication() yöntemini çağırmak önemlidir.

+0

Çok önemli bir nokta, belgelerde belirtilmemiş. Çok teşekkürler! – Stan

+0

ilginç bir şekilde, onCreate önce bu çağıran getApplication bir samsung galaxy not 3 üzerinde bir iş arkadaşı için iyi görünüyordu, ama benim nexus 5 üzerinde bir kazasında gördüm. – Sam

+0

Çok teşekkür ederim! Zaten umutsuz bir durumdaydım çünkü NullPointerExceptions'a her şekilde SharedPreferences'a katılmaya çalıştım. Bu benim için çözdü! Teşekkürler! –

-1

Sanırım, null işaretçisi değil, ancak AppObject sınıfında kullanmak istediğiniz işleviniz yanlış olabilir.

+0

Lütfen açıklayınız. Neden böyle düşünüyorsun? – naXa

+0

Bir kez hatayla tanıştım, kodu kontrol ettiğimde ve bu sebepten dolayı bu alanda yeni olduğumu ve bunun size yardımcı olacağını umduğumda. – user3641050

İlgili konular