【问题标题】:Context.getResources() NPEContext.getResources() NPE
【发布时间】:2017-01-17 11:43:21
【问题描述】:

我收到了几份关于我们的应用程序的崩溃报告。

这个错误是从 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,三星-SM-G935A 6.0.1、三星-SM-G890A 6.0, 阿尔科 6.0.1,摩托罗拉,XT1585

不知道是不是和https://code.google.com/p/android/issues/detail?id=56296一样

我也想知道它是否与getContext位置有关。我在 Fragment.onViewCreated 中调用它。

但它在源代码中说:片段的视图层次结构此时并未附加到其父级。

【问题讨论】:

  • 为什么不使用getActivity()
  • 你也可以使用view.getcontext()
  • @ρяσѕρєяK @keyur9779 感谢您的评论。你们能在这里指出getActivitygetContextview.getContext之间的区别吗?

标签: android android-fragments


【解决方案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)

【讨论】:

  • 能否解释一下为什么前者会抛出异常?
  • 我之前读过,有时getContext() 会返回 NPE。您应该在开发过程中使用getActivity() 而不是getContext()
  • 你还记得你在哪里读到的吗?或者你能给我一些关于 getContext() 会返回 NPE 的材料吗?我从来不知道会发生这样的事情。
  • 因为您将代码放在 Fragment 中,因此您可以阅读此内容以了解原因 stackoverflow.com/a/32227421/4316327
  • @FrancisBacon 接受您由它完成的答案。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-13
  • 1970-01-01
  • 1970-01-01
  • 2012-06-03
  • 1970-01-01
相关资源
最近更新 更多