【问题标题】:NullPointerException: Attempt to read from field 'int android.view.View.mViewFlags'NullPointerException:尝试从字段“int android.view.View.mViewFlags”中读取
【发布时间】:2016-03-24 01:58:31
【问题描述】:

我的应用运行良好,然后我在 build.gradle 中包含了支持设计库

compile 'com.android.support:design:23.2.1'

Android Studio 提示下载更多组件,然后我开始在以黑白方式导航不同片段时看到太多此类崩溃

FATAL EXCEPTION: main
Process: com.presdo.match.matchtemplate, PID: 23339
java.lang.NullPointerException: Attempt to read from field 'int android.view.View.mViewFlags' on a null object reference
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3197)
    at android.view.View.draw(View.java:15234)
    at android.widget.FrameLayout.draw(FrameLayout.java:598)
    at android.view.View.updateDisplayListIfDirty(View.java:14167)
    at android.view.View.getDisplayList(View.java:14189)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3389)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3368)
    at android.view.View.updateDisplayListIfDirty(View.java:14127)
    at android.view.View.getDisplayList(View.java:14189)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3389)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3368)
    at android.view.View.updateDisplayListIfDirty(View.java:14127)
    at android.view.View.getDisplayList(View.java:14189)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3389)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3368)
    at android.view.View.updateDisplayListIfDirty(View.java:14127)
    at android.view.View.getDisplayList(View.java:14189)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3389)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3368)
    at android.view.View.updateDisplayListIfDirty(View.java:14127)
    at android.view.View.getDisplayList(View.java:14189)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3389)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3368)
    at android.view.View.updateDisplayListIfDirty(View.java:14127)
    at android.view.View.getDisplayList(View.java:14189)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3389)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3368)
    at android.view.View.updateDisplayListIfDirty(View.java:14127)
    at android.view.View.getDisplayList(View.java:14189)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3389)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3368)
    at android.view.View.updateDisplayListIfDirty(View.java:14127)
    at android.view.View.getDisplayList(View.java:14189)
    at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:273)
    at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:279)
    at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:318)
    at android.view.ViewRootImpl.draw(ViewRootImpl.java:2530)
    at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2352)
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1982)
    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1061)
    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5885)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
    at android.view.Choreographer.doCallbacks(Choreographer.java:580)
    at android.view.Choreographer.doFrame(Choreographer.java:550)
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:135)
    at android.app.ActivityThread.main(ActivityThread.java:5254)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

这是我的 build.gradle

compile 'com.android.support:appcompat-v7:23.2.1'
compile 'com.android.support:recyclerview-v7:+'
compile 'com.android.support:cardview-v7:23.+'
compile 'com.android.support:support-v4:23.0.0'
compile 'com.android.support:percent:23.1.1'
compile 'com.android.support:multidex:1.0.0'
compile 'com.android.support:palette-v7:23.1.0'

我已经查看了this,但我不确定它是否与我的代码有关。

现在,即使我删除了谷歌设计支持库,我也会看到崩溃,并且无法预测它们何时发生,因为堆栈跟踪中没有对我的项目代码库的引用。

感谢任何帮助。

更新

我对 Gradle 进行了更改以使支持库版本保持一致,并且我不再看到崩溃。这是一个sn-p

ext {
    supportLibVersion = '23.2.1'
}

dependencies {
    compile "com.android.support:appcompat-v7:${supportLibVersion}"
    compile "com.android.support:recyclerview-v7:${supportLibVersion}"
    compile "com.android.support:cardview-v7:${supportLibVersion}"
    compile "com.android.support:support-v4:${supportLibVersion}"
    compile "com.android.support:percent:${supportLibVersion}"
    compile "com.android.support:palette-v7:${supportLibVersion}"
    compile "com.android.support:design:${supportLibVersion}"
    ...
}

【问题讨论】:

    标签: android nullpointerexception viewgroup


    【解决方案1】:

    这(再次)是一个动画问题。您可能使用

    设置了一些自定义动画
    fragmentTransaction.setCustomAnimations();
    

    删除它们,它会再次工作。恭喜,您现在拥有像 5 年前一样的片段转换。

    编辑:更好的方法是通过下载恢复旧存储库

    http://dl.google.com/android/repository/android_m2repository_r26.zip

    并替换

    中的所有内容
    /Users/.../Library/Android/sdk/extras/android/m2repository
    

    here获取。

    【讨论】:

    • 是的,有自定义动画黑白片段。就是这样完成的FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.setCustomAnimations(R.anim.slide_in_left_fast, R.anim.slide_out_left_fast); fragmentTransaction.replace(R.id.content_container, <fragment-reference>); fragmentTransaction.addToBackStack(null); fragmentTransaction.commit();我很想知道你为什么提到“你现在有 5 年前的片段转换。”
    • 您必须删除自定义动画。当您没有运行动画时,它将起作用。但它看起来像 5 年前的 Android,很糟糕,没有动画。这是……一个笑话。
    • 哈!好吧 :) 原来是我使用不同版本的支持库的问题。
    • @ElDuderino 很抱歉在 2 年后碰到。只是想知道是否有其他方法可以解决这个问题?我有同样的问题,但不想删除动画。
    • @ZassX sry,不能在 Android 上运行了,不知道现在是什么状态,但是你尝试下载安装dl.google.com/android/repository/android_m2repository_r26.zip 吗?
    【解决方案2】:

    混合来自不同支持库的版本通常不是一个好主意,因为它们具有可能无法跨版本工作的相互依赖关系。

    我会尝试将它们全部更新到 23.2.1,而不是混合使用 23.0、23.1 和 23.2

    【讨论】:

    • 谢谢史蒂夫。这实际上解决了我的问题。我现在将它们全部设置为 23.2.1
    猜你喜欢
    • 1970-01-01
    • 2016-01-19
    • 2015-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-03
    • 2017-06-13
    相关资源
    最近更新 更多