2013-06-15 3 views
6

मैं एक ऐसी गतिविधि बनाने की कोशिश कर रहा था जो एक सेवा शुरू करे (एक नए धागे में)। इसमें दो संपादन टेक्स्ट और भेजें नामक एक बटन वाला एक लेआउट होता है।java.lang.RuntimeException सेवा को तत्काल करने में असमर्थ: java.lang.NullPointerException

public class MainActivity extends Activity { 
    private String TAG = getClass().getSimpleName(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Thread t= new Thread(){ 
      public void run(){ 
       Intent intent=new Intent(getContext(),NotificationsService.class); 
       //Intent intent=new Intent("hikoki.services.NotificationsService"); 
       Log.d(TAG,"sending notificationsService"); 
       startService(intent); 
      } 
     }; 
     t.start(); 
    } 

    protected Context getContext() {  
     return this; 
    } 
} 

एक कोड आयुध डिपो NotificationsService यहाँ है:

public class NotificationsService extends IntentService{ 
    private static int TIME_INTERVAL_MILIS=5000; 
    private static final int REFRESH=10; 
    private NotificationManager noteManager; 
    private static List<FlightStatusNote> flights= new ArrayList<FlightStatusNote>(); 

    public NotificationsService(){ 
     super("NotificationsService"); 
     noteManager= NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE) 
    } 
} 

06-15 22:32:13.312: E/AndroidRuntime(643): FATAL EXCEPTION: main 
06-15 22:32:13.312: E/AndroidRuntime(643): java.lang.RuntimeException: Unable to instantiate service hikoki.services.NotificationsService: java.lang.NullPointerException 
06-15 22:32:13.312: E/AndroidRuntime(643): at android.app.ActivityThread.handleCreateService(ActivityThread.java:2237) 
06-15 22:32:13.312: E/AndroidRuntime(643): at android.app.ActivityThread.access$1600(ActivityThread.java:123) 
06-15 22:32:13.312: E/AndroidRuntime(643): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1201) 
06-15 22:32:13.312: E/AndroidRuntime(643): at android.os.Handler.dispatchMessage(Handler.java:99) 
06-15 22:32:13.312: E/AndroidRuntime(643): at android.os.Looper.loop(Looper.java:137) 
06-15 22:32:13.312: E/AndroidRuntime(643): at android.app.ActivityThread.main(ActivityThread.java:4424) 
06-15 22:32:13.312: E/AndroidRuntime(643): at java.lang.reflect.Method.invokeNative(Native Method) 
06-15 22:32:13.312: E/AndroidRuntime(643): at java.lang.reflect.Method.invoke(Method.java:511) 
06-15 22:32:13.312: E/AndroidRuntime(643): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
06-15 22:32:13.312: E/AndroidRuntime(643): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
06-15 22:32:13.312: E/AndroidRuntime(643): at dalvik.system.NativeStart.main(Native Method) 
06-15 22:32:13.312: E/AndroidRuntime(643): Caused by: java.lang.NullPointerException 
06-15 22:32:13.312: E/AndroidRuntime(643): at android.content.ContextWrapper.getSystemService(ContextWrapper.java:386) 
06-15 22:32:13.312: E/AndroidRuntime(643): at hikoki.services.NotificationsService.<init>(NotificationsService.java:35) 
06-15 22:32:13.312: E/AndroidRuntime(643): at java.lang.Class.newInstanceImpl(Native Method) 
06-15 22:32:13.312: E/AndroidRuntime(643): at java.lang.Class.newInstance(Class.java:1319) 
06-15 22:32:13.312: E/AndroidRuntime(643): at android.app.ActivityThread.handleCreateService(ActivityThread.java:2234) 
06-15 22:32:13.312: E/AndroidRuntime(643): ... 10 more 

मुख्य गतिविधि के कोड यह है: बिंदु जब मैं MainActivity निष्पादित, फेंक देता है कि वह यह है कि

और एंड्रॉइडमैनिफेस्ट यह है:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="hikoki.services" 
    android:versionCode="1" 
    android:versionName="1.0" > 

<uses-sdk 
    android:minSdkVersion="15" 
    android:targetSdkVersion="17" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name="hikoki.services.MainActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <service android:name=".FlightStatusService"></service> 
    <service android:enabled="true" android:name=".NotificationsService"></service> 
</application> 

</manifest> 
+0

आप ऑनस्टार्ट से पहले getSystemService को कॉल नहीं कर सकते हैं क्योंकि आपका संदर्भ प्रारंभ नहीं किया गया है। – njzk2

+0

@ njzk2 इसके लिए धन्यवाद! मैंने इसे बदल दिया, लेकिन यह अभी भी काम नहीं कर रहा है:/ – Mitodina

+0

कृपया नया स्टैक ट्रेस पोस्ट करें, क्योंकि अब आप कहीं और दुर्घटनाग्रस्त हो रहे हैं। – CommonsWare

उत्तर

10

आप प्रारंभकर्ता से getSystemService() पर कॉल नहीं कर सकते (जैसा कि आप मूल रूप से थे) या कन्स्ट्रक्टर से (जैसा कि आप अभी हैं)। कृपया onCreate() ओवरराइड करें, और वहां getSystemService() पर कॉल करें।

असल में, onCreate() तक कहा जाता है (या, और अधिक सही है, जब तक के बाद आप अपने onCreate() से super.onCreate() कहते हैं), Service पर विरासत में मिला तरीकों अभी तक अपने उपयोग के लिए तैयार नहीं हैं।

+0

बहुत बहुत धन्यवाद! इसने काम कर दिया! :) – Mitodina

2

मुझे एक ही त्रुटि थी। मेरी गलती यह थी कि सेवा में एक खाली डिफ़ॉल्ट कन्स्ट्रक्टर नहीं था। यहां कोड हल किया गया है:

public class MyService extends IntentService { 

    public MyService() { 
     super(null); // That was the lacking constructor 
    } 

    public MyService(String name) { 
     super(name); 
    } 

    //... 

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