2011-08-23 34 views
20

Başlamaya çalıştığım bir IntentService var. Ben ne zaman, dışarı tükürür bu: Ben bu googled ve bulabildiğim kadar birçok benzer StackOverflow soruları baktımBoş İşaretçi istisnası başlayan IntentService

java.lang.RuntimeException: Unable to start service [email protected] with Intent { cmp=com.pec.testapp/.service.NewsService }: java.lang.NullPointerException 
    at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2173) 
    ... (omitted for brevity) 
Caused by: java.lang.NullPointerException 
    at android.app.IntentService.onStart(IntentService.java:110) 
    at android.app.IntentService.onStartCommand(IntentService.java:118) 
    at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2160) 
    ... 10 more 

. Bununla birlikte, kafamı saramayacağım birkaç ince fark var. Her şeyden önce istisnada referans verilen sınıflarım yok. İkinci olarak, benzer sorular, bağlam değiştirilerek veya null olmadığından emin olmak için iki kez kontrol edilerek düzeltildi.

ben kod bu durum böyle değil kontrol etmek zorunda:

public Context context; 
@Override 
public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    context = getApplicationContext(); 

    if(context == null) 
     Log.d("PECAPP","Context is null"); 

    setContentView(R.layout.news_layout); 

    ...Omit button code... 
    button.setOnClickListener(new OnClickListener(){ 
     @Override 
     public void onClick(View view){ 
      Intent i = new Intent(context, NewsService.class); // also tried NewsActivity.this 
      if(i != null) // I know that this should never happen but I'm at a loss... 
       startService(i); // I've also tried this with context.startService(i) 
     } 
    }); 

} 

Benim IntentService google docs sonra modellenmiştir. Sadece onHandleIntent yöntemiyle bir kurucu. Nerede bu istisna geliyor ve bunu önlemek için farklı yapabileceği bir şey vardır:

public NewsService() { 
    super("NewsService"); 
} 

...omit onCreate() and onDestroy() since they haven't been implemented yet... 

@Override 
protected void onHandleIntent(Intent intent) throws IllegalArgumentException { 
    Log.d("PECAPP","Got here..."); // I never actually got here... 
    if(intent == null) Log.d("PECAPP","INTENT IS NULL"); 
    ...omit rest of code... 
} 

Benim soru şudur? Benim google-fu geçmişte beni başarısızlığa uğratmadı, bu yüzden umarım ki bu acımasız açık cevaplardan biri değildir. Ayrıca, daha iyi yapılabilir ya da sadece çirkin olan şeyler varsa, yapıcı eleştiri her zaman takdir edilir.

Bir şeyleri bıraktığımda, bir istisna olan NewsActivity ve NewsService'ı pastebin üzerine koydum. http://pastebin.com/mR9Sykrq

cevap

50

IntentService numaranızda onCreate()'u geçersiz kılacaksanız, super.onCreate() numaralı telefonu aradığınızdan emin olun. Bu muhtemelen senin problemin gibi görünüyor. Aynı sorun, ama aynı zamanda bir intentService kullanılarak, ve bir

context = getApplicationContext(); 

veya içeriği = getBaseContext() kullanılarak bir problem olup olmadığını

+3

Genellikle bunu bir Etkinlik içinde unutursanız, kilitlendiğinde size hatırlatacaktır, ancak görünüşte burada değil. –

+0

@Jarett Android'in birçok harikalarından sadece bir tanesi =] –

+0

Teşekkürler, ve benim için çalışıyor. – mxi1

8

emin değil; Ben onCreate geçersiz kılma değildi yüzden önceki çözüm ı 2'nci kullanarak çalıştı

Bir istisna sonradan ilk ile hemen bir istisna olsun ve olacaktır "onHandleIntent" Ben içeride çalışıyordum sizin için çözüm olabilir .

Intentservice'in, bir Bağlam alt sınıfının, olduğunu anladım ve bu yüzden "Bağlam" örneğine ihtiyaç duyduğum her yerde "bunu" değiştirdim. Bu benim sorunumu çözdü.

+0

Bu bana çok yardımcı oluyor. –

+0

Sizinkiyle aynı sorunu yaşıyordu. Çok Teşekkürler .. Bana çok zaman kazandı – Yasir

+0

appContext 'Context appContext = getApplicationContext()' için null değer alıyorum. – kAmol

İlgili konular