2011-08-23 11 views
20

私が開始しようとしているIntentServiceがあります。私がやるときは、これを吐く:IntentServiceを開始するNULLポインター例外

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 

私はこれをGoogleで検索し、私は見つけることができる限り多くの同様のStackOverflowの質問を見てきました。しかし、私の周りを包み込むことができない微妙な違いがいくつかあります。まず第一に、例外に参照されるクラスはありません。第2に、文脈を変更するか、またはヌルでないことを確認するために二重チェックを行うことによって同様の質問が修正されました。

私はそれをチェックするためのコードを持っているケースではありません。

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は、Googleドキュメントの後にモデル化されています。 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... 
} 

だから私の質問はこれです:はどここの例外がから来ていると私はそれを避けるために、異なる行うことができるものがありますか?私のgoogle-fuは過去に私を失敗させていないので、うまくいけば、これは痛いほど明白な答えの一つではありません。また、より良いやり方ができたり、まったく醜いことがあるとすれば、建設的な批判は常に高く評価されます。

私は何かを残した場合に備えて、pasteAnbotにNewsActivityとNewsServiceを完全に入れました。 http://pastebin.com/mR9Sykrq

答えて

50

IntentServiceonCreate()を無効にする場合は、super.onCreate()に電話してください。それはあなたの問題である可能性が高いようです。それは同じ問題ですが、私もintentServiceを使用していた、と私は

context = getApplicationContext(); 

または コンテキスト= getBaseContext()を使用してトラブルを抱えていた場合

+3

通常、アクティビティでこれを忘れてしまった場合、クラッシュすると思い出されますが、明らかにここには表示されません。 –

+0

@Jarett Androidの多くの不思議のただ一つの例=] –

+0

ありがとう、それは私のために働く。 – mxi1

8

わかりません。 私は第二を使用しようとしたとき、私は例外後に最初に即時の例外を取得し、そしてだろう、私は「onHandleIntent」内

を働いていたのonCreateオーバーライドので、以前のソリューションは、あなたのためのソリューションがあり、 いませんでした。

私はIntentservice自体がContextのサブクラスであることを認識しました。 だから、私は "Context"のインスタンスが必要な場所で "this"を置き換えました。

これは私の問題を解決しました。

+0

これは私に多くの助けになります。 –

+0

あなたと同じ問題に直面していましたか?多くのありがとう..あなたは私に多くの時間を節約しました。 – Yasir

+0

私はappContext 'Context appContext = getApplicationContext()'のnull値を取得しています。 – kAmol

関連する問題