2011-08-23 9 views
20

मुझे एक इरादा सेवा मिली है जिसे मैं शुरू करने की कोशिश कर रहा हूं। जब मैं करते हैं, इसे बाहर थूक इस:शून्य सूचक अपवाद प्रारंभिक सेवा

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 

मैं इस googled और के रूप में इसी तरह के कई StackOverflow सवाल को देखा के रूप में मैं मिल सकता है। हालांकि, कुछ सूक्ष्म अंतर हैं जो मैं अपने सिर को चारों ओर लपेट नहीं सकता। सबसे पहले, अपवाद में संदर्भित मेरी कोई भी कक्षा नहीं है। दूसरा, यह सुनिश्चित करने के लिए कि यह शून्य नहीं है, संदर्भ या दोहरी जांच को बदलकर समान प्रश्न तय किए गए हैं।

मैं कोड है कि ऐसा नहीं है की जाँच करने के लिए है:

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

} 

मेरे IntentService गूगल डॉक्स के बाद मॉडलिंग की है। बस एक हैंडलइन्टेंट विधि के साथ एक कन्स्ट्रक्टर।

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

तो मेरे सवाल यह है: कहाँ इस अपवाद से आ रही है और वहाँ कुछ मैं इसे से बचने के लिए अलग कर सकते हैं? मेरे google-fu ने मुझे अतीत में विफल नहीं किया है, इसलिए उम्मीद है कि यह उन दर्दनाक स्पष्ट उत्तरों में से एक नहीं है। इसके अलावा, अगर ऐसी चीजें हैं जिन्हें बेहतर किया जा सकता है या केवल सादे बदसूरत हैं, रचनात्मक आलोचना हमेशा सराहना की जाती है।

मैंने कुछ छोड़ दिया, तो मैंने पेस्टबिन पर पूर्ण अपवाद, न्यूजएक्टिविटी और न्यूज सर्विस को रखा। http://pastebin.com/mR9Sykrq

उत्तर

50

आप अपने IntentService में onCreate() ओवरराइड करने के लिए है, तो सुनिश्चित करें कि आप उस में super.onCreate() फोन बनाने जा रहे हैं। ऐसा लगता है कि आपकी समस्या काफी संभावना है।

+3

आमतौर पर यदि आप इसे भूल जाते हैं, तो कहें, एक गतिविधि, यह आपको क्रैश होने पर याद दिलाएगी, लेकिन स्पष्ट रूप से यहां नहीं। –

+0

@ जेरेट एंड्रॉइड के कई आश्चर्यों का एक उदाहरण =] –

+0

धन्यवाद, और यह मेरे लिए काम करता है। – mxi1

8

सुनिश्चित नहीं हैं कि अगर यह एक ही समस्या है, लेकिन मैं एक intentService उपयोग कर रहा था भी, और मैं

context = getApplicationContext(); 

या संदर्भ = getBaseContext() का उपयोग करने में समस्या आ गई थी; मैं onCreate अधिभावी नहीं कर रहा था तो पिछले समाधान, आप के लिए समाधान हो सकता है मैं अंदर काम कर रहा था "onHandleIntent"

मैं एक अपवाद बाद में पहले से एक तत्काल अपवाद मिलेगा, और जब मैं 2 उपयोग करने की कोशिश ।

मैं यह महसूस कर रहा हूं कि Intentservice स्वयं संदर्भ, का उप-वर्ग है इसलिए मैंने "संदर्भ" को प्रतिस्थापित किया जहां भी मुझे "संदर्भ" का उदाहरण चाहिए।

इससे मेरी समस्या हल हो गई।

+0

इससे मुझे बहुत मदद मिलती है। –

+0

आपके जैसा ही समस्या का सामना कर रहा था। बहुत धन्यवाद .. आपने मुझे बहुत समय बचाया – Yasir

+0

मुझे ऐपकॉन्टेक्स्ट 'संदर्भ ऐपकोन्टेक्स्ट = getAplicationContext()' के लिए शून्य मान मिल रहा है। – kAmol