2013-01-02 33 views
8

मैं एक टुकड़े से एक सेवा को बांधने का प्रयास कर रहा हूं जैसा कि मैंने एक गतिविधि में सफलतापूर्वक किया है, लेकिन जब मैं सेवा पर एक विधि कॉल करने का प्रयास करता हूं तो मुझे एक NullPointerException मिलता है - जाहिर है क्योंकि सेवा शून्य है। अब ऑनस्टार्ट में सेवा के लिए बाध्यकारी के साथ कुछ समस्या है या क्या मैं बस इसे गलत कर रहा हूं?मैं एक टुकड़े से एक सेवा कैसे बांध सकता हूं

@Override 
public void onStart() { 
    super.onStart(); 

    Intent intent = new Intent(getActivity(), LiteTrickService.class); 
    getActivity().registerReceiver(receiver, new IntentFilter(LiteTrickService.BROADCAST_ACTION)); 
    getActivity().registerReceiver(receiver, new IntentFilter(LiteTrickService.BROADCAST_FAIL)); 
    getActivity().bindService(intent, mConnection, Context.BIND_AUTO_CREATE); 
} 

@Override 
public void onStop() { 
    super.onStop(); 
    getActivity().unbindService(mConnection); 
    getActivity().unregisterReceiver(receiver); 
    mBound = false; 
} 

संपादित करें: क्षमा करें। इस सवाल को पर्याप्त विचार देने के लिए यह मेरी गलती है। mConnection एक ServiceConnection है और इस तरह दिखता है:

private ServiceConnection mConnection = new ServiceConnection() 
{ 

    @Override 
    public void onServiceConnected(ComponentName className, 
      IBinder service) { 
     // We've bound to LocalService, cast the IBinder and get LocalService instance 
     LocalBinder binder = (LocalBinder) service; 
     mService = binder.getService(); 
     mBound = true; 
    } 

    @Override 
    public void onServiceDisconnected(ComponentName arg0) { 
     mBound = false; 
    } 
}; 

स्टैकट्रेस: ​​

01-03 15:21:22.355: E/AndroidRuntime(12360): FATAL EXCEPTION: main 
01-03 15:21:22.355: E/AndroidRuntime(12360): java.lang.NullPointerException 
01-03 15:21:22.355: E/AndroidRuntime(12360): at lite.hattrick.players.PlayerRankingFragment.onOptionsItemSelected(PlayerRankingFragment.java:205) 

और यह सही जगह है जहाँ अपवाद फेंक दिया है होगा: मामले POPULATE_ID:

 if (hasData) { 
      return false; 
     } 
     if(!mBound) 
      getActivity().bindService(new Intent(getActivity().getApplicationContext(), LiteTrickService.class), mConnection, Context.BIND_AUTO_CREATE); 
     mService.refreshPlayers(); // Null Pointer Exception as mService is null 
     pBar.setVisibility(View.VISIBLE); 
     return true; 
+0

mwonnection में wwhat है? प्लस, पोस्ट स्टैक ट्रेस – njzk2

+0

सेवा की बाध्यकारी एक संदर्भ से जुड़ी हुई है, ताकि काम करना चाहिए। आपको और कोड दिखाना चाहिए क्योंकि मुझे संदेह है कि समस्या कहीं और है। – jsmith

+0

@ जेस्मिथ मैं खुशी से अधिक कोड दिखाऊंगा लेकिन मुझे विशेष रूप से यह जानना होगा कि सेवा शून्य क्यों होगी। मैंने स्टैकट्रैक – CodePrimate

उत्तर

13

मैंने समस्या हल की। बाहर निकलता है मैं अपने मैनिफेस्ट में अपने सही पैकेज नाम के साथ सेवा घोषणा प्रदान करना भूल गया था।

<service android:name=".LiteTrickService" /> 

बदलते

<service android:name="lite.hattrick.services.LiteTrickService" /> 

करने से मैं समस्या हल और सेवा अब अपेक्षा के अनुरूप कनेक्ट कर रहा है।

+0

मैं भी भूल गया। मेरे लिए भी काम किया ..... धन्यवाद !!!! –

0

आपका NullPointerExceptionmService चर पर है। जैसा कि आप bindService() पर कॉल करते हैं, ActivityService पर अपने स्वयं के धागे पर बांधता है। इसका मतलब है कि सेवा बाध्यकारी होने पर आपका कोड चल रहा रहेगा। इसके परिणामस्वरूप आपके mService परिवर्तनीय अभी भी null हैं।

आप क्या कर सकते हैं Service की onServiceConnected() विधि के बाद चलने वाले कोड को ले जाया गया है। यह आश्वस्त करेगा कि mService वेरिएबल आपकी सेवा को इंगित करेगा, और शून्य नहीं होगा।

+0

को शामिल करने के लिए अपना मूल प्रश्न संपादित किया, मैंने जो कहा वह मैंने किया लेकिन ऐसा लगता है कि सेवा कभी भी सफलतापूर्वक कनेक्ट नहीं होती है क्योंकि सेवा कनेक्ट नहीं किया जाता है। – CodePrimate

+0

आपको अभी भी ऐसा करना चाहिए, क्योंकि, यदि आपका '(एमबाउंड) 'चर' झूठा 'हो सकता है, तो आपको अभी भी' nullpointer' मिल जाएगा क्योंकि 'सेवा' के बाध्यकारी आपके विचार से अधिक समय लेते हैं, और जैसा कि यह है एक एसिंक्रोनस कॉल, आपके बाद के कॉल 'mService.refreshPlayers()' को एक nullpointer देगा। – tolgap

+0

आप सही हैं और मैंने अपना कोड एडजस्ट किया ताकि रीफ्रेश प्लेयर्स केवल तभी बुलाए जाएंगे जब एमबाउंड सत्य है। – CodePrimate

संबंधित मुद्दे

 संबंधित मुद्दे