2012-11-13 14 views
7

This के साथ चलने पर NullPointerException फेंकता है 2-वर्षीय एंड्रॉइड बग एक ज्ञात परेशान है।Service.startForeground() सर्विसटेस्टकेस

मेरा प्रश्न यह है कि किसी को भी इस समस्या के लिए कोई कामकाज पता है, इसके अलावा एंड्रॉइड स्रोत कोड को संशोधित करने और इसे फिर से संकलित करने के अलावा?

मेरी सेवा उपवर्ग विधि है कि एनपीई को जन्म देती है:

/** Shows notification of started service */ 
private void doStartForeground() { 

    // Prepare notification 
    final NotificationHelper nh = doNotification("Service started"); 

    // Start foreground 
    startForeground(nh.getNotificationId(), nh.getNotification()); 
} 

यह onCreate() विधि ओवरराइड से कहा जाता है

यहाँ पूरा होने के लिए मेरी कोड है।

और JUnit परीक्षण विधि:

public void test1() throws InterruptedException { 
    assertTrue(context != null); 
    final Intent service = new Intent(); 
    service.setComponent(new ComponentName(CoreService.PACKAGE_NAME, 
     CoreService.SERVICE_FULL_NAME)); 
    IBinder binder = bindService(service); 
    assertTrue(binder != null); 
} 

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

java.lang.NullPointerException 
at android.app.Service.startForeground(Service.java:631) 
at com.blablabla.android.core.CoreService.doStartForeground(CoreService.java:82) 
at com.blablabla.android.core.CoreService.onCreate(CoreService.java:149) 
at android.test.ServiceTestCase.bindService(ServiceTestCase.java:234) 
at com.blablabla.android.core.test.MainTest.test1(MainTest.java:37) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169) 
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154) 
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:537) 
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1551) 

सेवा सही ढंग से शुरू होता है और ठीक काम करता है जब Android के JUnit के माध्यम से नहीं चला।

/** JUNIT - this is for testing purposes only */ 
public static boolean isJUnit = false; 

और onCreate() विधि में यह जाँच:

उत्तर

6

मैं अंत में मेरी सेवा में एक नया स्थिर क्षेत्र को जोड़ने के समाप्त हो गया

// Start the service as foreground (Android should not kill this 
// service) 
if (!isJUnit) { 
    doStartForeground(); 
} 

तब मैं JUnit के setUp() से इस ध्वज सेट:

@Override 
protected void setUp() throws Exception { 
    super.setUp(); 
    // More setup 
    MyServiceClass.isJUnit = true; 
} 

सबसे सुरुचिपूर्ण समाधान नहीं है लेकिन मुझे नाकाबंदी से बाहर कर देता है।

+1

भयानक! यह खोजने के लिए Thx। इस मुद्दे को यहां एडीटी मंच में संदर्भित किया गया है: https://code.google.com/p/android/issues/detail?id=12122 – Snicolas

+1

हाँ मैंने देखा कि (लिंक प्रश्न में है)। यह अब 3 साल पुराना है और गिनती है ... – m0skit0

+0

इसे अप्रचलित के रूप में चिह्नित किया गया था, हालांकि मुझे यकीन नहीं है कि क्यों। – Xiao

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

  • कोई संबंधित समस्या नहीं^_^