2016-05-20 29 views
0

私はこのエラーをログカットに表示していますが、追加情報はありません。仮想メソッドnullを呼び出すcontext.getSystemService

reply.send(RESULT_AVAILABLE); 

これは次のとおりです。

PendingIntent reply = intent.getParcelableExtra(PENDING_RESULT_EXTRA); 
if (reply != null) { 
if (requestType == 1) { 
    try { 
     if (! googInfo.equals("") || googReach) { 
      googReach = true; 
     } 

     if (! tradInfo.equals("") || tradReach) { 
      tradReach = true; 
     } 

     if (tradReach && googReach) {// && ! tooSlow) { 
      reply.send(RESULT_BOTH_AVAILABLE); 
     } else if (tradReach) {// && ! tooSlow) { 
      reply.send(RESULT_TRAD_AVAILABLE); 
     } else if (googReach) {// && ! tooSlow) { 
      reply.send(RESULT_GOOG_AVAILABLE); 
     } else { 
      reply.send(RESULT_UNAVAILABLE); 
     } 
    } catch (Exception e) { 
     Log.e(TAG, e.getMessage()); 
    } 
} else { 
    try { 
     if (! googInfo.equals("") || ! tradInfo.equals("") || googReach || tradReach) { 
      reply.send(RESULT_AVAILABLE); 
     } else { 
      reply.send(RESULT_UNAVAILABLE); 
     } 
    } catch (Exception e) { 
     Log.e(TAG, e.getMessage()); 
    } 
} 
} 

は、私は次の操作を行う部分より正確には:

Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference

は、デバッグしている間、私はこの部分でエラーが発生したことが判明しましたアクティビティによって開始されるIntentService。デバッグ中は、返答オブジェクトが正しく埋め込まれていることがわかりました。また、RESULT_AVAILABLEは、正しい値を持つ静的final intです。

このIntentServiceは、次のコードで呼び出されます。

PendingIntent pendingResult = createPendingResult(INTERNET_AVAILABILITY_CODE, new Intent(), 0); 
Intent intent = new Intent(getApplicationContext(), PingIntentService.class); 
intent.putExtra(PingIntentService.PENDING_RESULT_EXTRA, pendingResult); 
startService(intent); 

奇妙なことは、私は、コードのこれらの部分には何も変更していないと、それは常に正しく働いていた、です。他の奇妙なことは私のtry/catchブロックが例外をキャッチしないことです。私はエラーに関する詳細情報を得ることができるように、その部分にブレークポイントと詳細情報を入れましたが、その部分はトリガされません。

私はすでにエラーを検出しており、多くの人が他の状況でこの問題を抱えているようです。私は自分のコンテキストがnullだと理解していますが、デバッグ中にはnullではないことがわかります...私が見つけたすべてのリンク/答えでさえ、私はまだ私の問題の原因を見つけることができません。

+2

Javaスタックトレース全体と、そのスタックトレースで参照されるすべてのコードを投稿してください。 – CommonsWare

答えて

0

ソリューションの検索を続けながら、私はCommonsWareのおかげで答えがうまくいかなかった。エラー自体は、この部分ではありませんでした:

reply.send(RESULT_AVAILABLE);

私はJavaスタックトレースには何も表示されませんでした、なぜ私が探していました。上記のコードでtry/catchブロックでエラーが検出されているはずですが、アクティビティがIntentServiceから結果を返すときにエラーが発生しました。

実際には、私のContextオブジェクトがまだNullだったコードがありました。私はgetApplicationContext()に変更し、修正されました。このエラーは、アプリケーションがデバイスで最初に起動されたときにのみ発生するため、以前は発生していませんでした。それは私のアプリケーションコンテキストを保存して渡した最初の段階で追加されたコードの一部です。最初に起動するとき、このオブジェクトはまだ埋め込まれておらず、このエラーが発生します。

1

サイドノードと同じです。

conditionのこの種のあなたのコードnull safe作る:あなたはNullPointerExceptiontradInfo場合はnullです(?そして多分それが有効な場合である)を取得しますtradInfo.equals("")

"".equals(tradInfo) 

を。あなたがそれをトグルすれば、それは起こり得ません。

関連する問題