2017-01-17 4 views
0

私のアプリについていくつかのクラッシュレポートがあります。Context.getResources()NPE

この不具合はSocorroインターフェイスから提出され、 レポートbp-d1b4cdb8-fd3f-457b-9a29-df9192170112です。 ソコロ-署名:

java.lang.NullPointerException: Attempt to invoke virtual method ''android.content.res.Resources android.content.Context.getResources()'' on a null object reference: at dnu.afterTextChanged(CommentOperatingFragment.java)

のJavaスタックトレース:ここ

java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference 
    at dnu.afterTextChanged(CommentOperatingFragment.java:252) 
    at android.widget.TextView.sendAfterTextChanged(TextView.java:7929) 
    at android.widget.TextView.setText(TextView.java:4084) 
    at android.widget.TextView.setText(TextView.java:3933) 
    at android.widget.EditText.setText(EditText.java:85) 
    at android.widget.TextView.setText(TextView.java:3908) 
    at dnv.a(CommentOperatingFragment.java:269) 
    at dpz.a(SoftKeyboardStateHelper.java:84) 
    at dpz.onGlobalLayout(SoftKeyboardStateHelper.java:47) 
    at android.view.ViewTreeObserver.dispatchOnGlobalLayout(ViewTreeObserver.java:912) 
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1899) 
    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1079) 
    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5915) 
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:773) 
    at android.view.Choreographer.doCallbacks(Choreographer.java:586) 
    at android.view.Choreographer.doFrame(Choreographer.java:556) 
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:759) 
    at android.os.Handler.handleCallback(Handler.java:739) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:135) 

はCommentOperatingFragmentで私のコードです:

@Override 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
     …... 
     mCommentEdt.addTextChangedListener(new TextWatcher() { 
      @Override 
      public void beforeTextChanged(CharSequence charSequence, 
              int i, int i1, int i2) { 
      } 

      @Override 
      public void onTextChanged(CharSequence charSequence, 
             int i, int i1, int i2) { 
      } 

      @Override 
      public void afterTextChanged(Editable editable) { 
       if (mCommentEdt.getText().toString().isEmpty()) { 
        mPostTxt.setClickable(false); 
        mPostTxt.setTextColor(ResourcesCompat.getColor(getContext().getResources(),// Line 252 
          R.color.article_comment_area_post_color_without_text, null)); 
       } else { 
        mPostTxt.setClickable(true); 
        mPostTxt.setTextColor(ResourcesCompat.getColor(getContext().getResources(), 
          R.color.article_comment_area_post_color_with_text, null)); 
       } 
      } 
     }); 
} 

それはいくつかのデバイス上で起こりました。

6.0.1、SAMSUNG-SM-G935A 6.0.1、SAMSUNG-SM-G890A 6.0、アルコ 6.0.1、モトローラ、XT1585

それが同じであれば、私にはわかりませんhttps://code.google.com/p/android/issues/detail?id=56296

また、getContextの場所に関連しているのだろうかと思います。私はFragment.onViewCreatedでそれを呼び出しました。

しかし、ソースコードでは次のように言います。フラグメントのビュー階層は、この時点では親には付けられていません。

+0

に 'getActivityを()'を使用していないのはなぜ? –

+0

また、view.getcontext()を使用することもできます。 –

+0

@ρяσѕρєяK @ keyur9779 ありがとうございました。あなたは 'getActivity'、' getContext'、 'view.getContext'の違いをここで指摘できますか? –

答えて

1

変更

ResourcesCompat.getColor(getContext().getResources(), 
          R.color.article_comment_area_post_color_with_text, null) 

ContextCompat.getColor(getActivity(), R.color.article_comment_area_post_color_with_text) 
+0

前者が例外をスローする理由を説明できますか? –

+0

これまでに 'getContext()'がNPEを返すことがあることがあります。 開発中には 'getContext()'の代わりに 'getActivity()'を使うべきです。 – TruongHieu

+0

あなたはそれをどこから読んだのか思い出しましたか?または、getContext()がNPEを返すことについてのいくつかの資料を私に与えることができますか?私はそのようなことが起こることを知らなかった。 –