2011-08-23 36 views
20

Tôi đã có một IntentService mà tôi đang cố gắng để bắt đầu. Khi tôi làm, nó spits ra này:Null Trỏ ngoại lệ bắt đầu IntentService

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 

Tôi có googled này và nhìn vào càng nhiều câu hỏi StackOverflow tương tự như tôi có thể tìm thấy. Tuy nhiên, có một vài sự khác biệt tinh tế mà tôi không thể quấn quanh đầu. Trước hết, không có bất kỳ lớp học nào của tôi được tham chiếu trong ngoại lệ. Thứ hai, các câu hỏi tương tự đã được sửa bằng cách thay đổi ngữ cảnh hoặc kiểm tra lại để đảm bảo nó không phải là rỗng.

tôi có mã để kiểm tra đó không phải là trường hợp:

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 My được mô hình hóa sau khi các tài liệu google. Đơn giản chỉ là một hàm tạo với một phương thức onHandleIntent.

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

Vì vậy, câu hỏi của tôi là thế này: đâu ngoại lệ này đến từ đâu và có gì đó tôi có thể làm khác nhau để tránh nó? Google-fu của tôi đã không thất bại trong quá khứ, vì vậy hy vọng đây không phải là một trong những câu trả lời rõ ràng đau đớn. Ngoài ra, nếu có những điều có thể được thực hiện tốt hơn hoặc chỉ đơn giản là xấu xí, những lời chỉ trích mang tính xây dựng luôn được đánh giá cao.

Tôi đặt ngoại lệ đầy đủ, NewsActivity và NewsService lên pastebin trong trường hợp tôi đã loại bỏ điều gì đó. http://pastebin.com/mR9Sykrq

Trả lời

50

Nếu bạn định ghi đè onCreate() trong số IntentService, hãy đảm bảo bạn gọi super.onCreate() trong đó. Điều đó dường như khá có thể là vấn đề của bạn.

+3

Thông thường nếu bạn quên điều này trong, nói, một Hoạt động, nó sẽ nhắc bạn khi nó gặp sự cố, nhưng dường như không có ở đây. –

+0

@ Jarett Chỉ cần một ví dụ về nhiều điều kỳ diệu của Android =] –

+0

Cảm ơn, và nó hoạt động cho tôi. – mxi1

8

Không chắc chắn nếu nó là cùng một vấn đề, nhưng tôi đã sử dụng một intentService cũng có, và tôi đã gặp khó khăn trong sử dụng

context = getApplicationContext(); 

hoặc context = getBaseContext(); Tôi đã không trọng onCreate vì vậy giải pháp trước đó có thể là giải pháp cho bạn, Tôi đã làm việc bên trong "onHandleIntent"

tôi sẽ nhận được một ngoại lệ ngay lập tức với những người đầu tiên, và một ngoại lệ sau khi tôi đã cố gắng sử dụng 2nd .

Tôi đã kết thúc nhận ra rằng Intentservice chính nó là một lớp con của Ngữ cảnh, vì vậy tôi đã thay thế "này" ở bất cứ đâu tôi cần một thể hiện "Ngữ cảnh".

Điều này giải quyết được sự cố của tôi.

+0

Điều này giúp tôi rất nhiều. –

+0

Đang đối mặt với cùng sự cố với bạn. Rất cám ơn .. Bạn đã tiết kiệm cho tôi rất nhiều thời gian – Yasir

+0

Tôi nhận được giá trị null cho appContext 'Ứng dụng ngữ cảnhContext = getApplicationContext()'. – kAmol

Các vấn đề liên quan