Soru IntentService başlayan boş işaretçi istisnası


Başlamaya çalıştığım bir IntentService var. Yaptığım zaman, buna tükürür:

java.lang.RuntimeException: Unable to start service com.pec.testapp.service.NewsService@406bd940 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

Bunu araştırdım ve bulabildiğim kadar benzer StackOverflow sorularına baktım. 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.

Durumun böyle olmadığını kontrol etmek için kodum var:

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

}

IntestService, Google Dokümanlarından sonra modellenmiştir. Sadece onHandleIntent yöntemiyle bir kurucu.

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

İşte benim sorum bu: Bu istisna nereden geliyor ve bundan kaçınmak için yapabileceğim bir şey var mı? Benim google-fu geçmişte beni başarısızlığa uğratmadı, bu yüzden umarım bu acı verici 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 şeyi dışarıda bıraktığımda, tamamen istisna, NewsActivity ve NewsService'yi pastebin'e koydum. http://pastebin.com/mR9Sykrq


20
2017-08-23 17:38


Menşei




Cevaplar:


Eğer geçersiz kılacaksan onCreate() senin içinde IntentService, o zaman aradığınızdan emin olun super.onCreate() içinde. Bu muhtemelen senin problemin gibi görünüyor.


50
2017-08-23 17:54



Genellikle, bunu bir Etkinlik içinde unutursanız, çöktüğünde size hatırlatacaktır, ama görünüşte burada değil. - Jarett Millard
@Jarett Android'in birçok harikalarından sadece bir tanesi =] - Richard Fung
Teşekkürler, benim için çalışıyor. - mxi1


Aynı sorun olup olmadığından emin değilim, ama aynı zamanda bir intentService kullanıyordum ve kullanmakta zorlanıyordum.

context = getApplicationContext();

veya     context = getBaseContext (); OnCreate'ı geçersiz kılmadım, böylece önceki çözüm sizin için bir çözüm olabilir. "OnHandleIntent" in içinde çalışıyordum.

İlkini kullanarak hemen bir istisna ve 2. kullanmayı denediğimde bir istisna alırdım.

Intentservice'nin kendisini bir İçerik alt sınıfı olduğunu fark ettim. Bu yüzden "Bağlam" ın bir örneğine ihtiyaç duyduğum yerde "bu" ile değiştirdim.

Bu benim problemimi çözdü.


8
2017-12-01 22:37



Bu bana çok yardımcı oluyor. - Owen Zhao
Seninkiyle aynı sorunu yaşıyordu. Çok teşekkürler .. Bana çok zaman kurtardın - Yasir
AppContext için boş değer alıyorum Context appContext = getApplicationContext(). - kAmol