更新到Android设计支持库22.2.1后出现空指针异常

6
我的项目在更新到Android design support 22.2.1之前一直运行良好,但是更新后运行程序时,出现以下错误。该异常未指示哪一行代码或Java文件导致了错误,因此不知道需要发布哪些代码。似乎是Android设计支持内部错误。
我的活动正在扩展AppCompatActivity,我的测试设备API 15(Android 4.04)。
我正在使用NavigationViewDrawerLayout在我的代码中。
我的build.gradle
android {
compileSdkVersion 22
buildToolsVersion "22.0.1"

defaultConfig {
    applicationId "com.stackoverflow.ranjith.androidprojdel"
    minSdkVersion 15
    targetSdkVersion 22
    versionCode 1
    versionName "1.0"
    multiDexEnabled true
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.2.+'
compile 'com.parse.bolts:bolts-android:1.+'
compile 'com.android.support:cardview-v7:22.2.+'
compile 'com.android.support:recyclerview-v7:22.2.+'
compile 'com.google.android.gms:play-services-plus:7.5.0'
compile 'com.google.android.gms:play-services-ads:7.5.0'
compile 'com.android.support:design:22.2.+'
compile 'joda-time:joda-time:2.8.1'
}

异常:

07-19 00:52:49.338: E/AndroidRuntime(15556): FATAL EXCEPTION: main
07-19 00:52:49.338: E/AndroidRuntime(15556): java.lang.NullPointerException
07-19 00:52:49.338: E/AndroidRuntime(15556):    at android.support.design.internal.NavigationMenuItemView.setIcon(NavigationMenuItemView.java:113)
07-19 00:52:49.338: E/AndroidRuntime(15556):    at android.support.design.internal.NavigationMenuItemView.initialize(NavigationMenuItemView.java:72)
07-19 00:52:49.338: E/AndroidRuntime(15556):    at android.support.design.internal.NavigationMenuPresenter$NavigationMenuAdapter.getView(NavigationMenuPresenter.java:305)
07-19 00:52:49.338: E/AndroidRuntime(15556):    at android.widget.HeaderViewListAdapter.getView(HeaderViewListAdapter.java:220)
07-19 00:52:49.338: E/AndroidRuntime(15556):    at android.widget.AbsListView.obtainView(AbsListView.java:2045)
07-19 00:52:49.338: E/AndroidRuntime(15556):    at android.widget.ListView.makeAndAddView(ListView.java:1772)
07-19 00:52:49.338: E/AndroidRuntime(15556):    at android.widget.ListView.fillDown(ListView.java:672)
07-19 00:52:49.338: E/AndroidRuntime(15556):    at android.widget.ListView.fillFromTop(ListView.java:732)
07-19 00:52:49.338: E/AndroidRuntime(15556):    at android.widget.ListView.layoutChildren(ListView.java:1625)
07-19 00:52:49.338: E/AndroidRuntime(15556):    at android.widget.AbsListView.onLayout(AbsListView.java:1875)
07-19 00:52:49.338: E/AndroidRuntime(15556):    at android.view.View.layout(View.java:11390)
07-19 00:52:49.338: E/AndroidRuntime(15556):    at android.view.ViewGroup.layout(ViewGroup.java:4332)
07-19 00:52:49.338: E/AndroidRuntime(15556):    at android.widget.FrameLayout.onLayout(FrameLayout.java:444)
07-19 00:52:49.338: E/AndroidRuntime(15556):    at android.view.View.layout(View.java:11390)
07-19 00:52:49.338: E/AndroidRuntime(15556):    at android.view.ViewGroup.layout(ViewGroup.java:4332)
07-19 00:52:49.338: E/AndroidRuntime(15556):    at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:931)
07-19 00:52:49.338: E/AndroidRuntime(15556):    at android.view.View.layout(View.java:11390)
07-19 00:52:49.338: E/AndroidRuntime(15556):    at android.view.ViewGroup.layout(ViewGroup.java:4332)
07-19 00:52:49.338: E/AndroidRuntime(15556):    at android.widget.FrameLayout.onLayout(FrameLayout.java:444)
07-19 00:52:49.338: E/AndroidRuntime(15556):    at android.view.View.layout(View.java:11390)
07-19 00:52:49.338: E/AndroidRuntime(15556):    at android.view.ViewGroup.layout(ViewGroup.java:4332)
07-19 00:52:49.338: E/AndroidRuntime(15556):    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1653)
07-19 00:52:49.338: E/AndroidRuntime(15556):    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1511)
07-19 00:52:49.338: E/AndroidRuntime(15556):    at android.widget.LinearLayout.onLayout(LinearLayout.java:1416)
07-19 00:52:49.338: E/AndroidRuntime(15556):    at android.view.View.layout(View.java:11390)
07-19 00:52:49.338: E/AndroidRuntime(15556):    at android.view.ViewGroup.layout(ViewGroup.java:4332)
07-19 00:52:49.338: E/AndroidRuntime(15556):    at android.widget.FrameLayout.onLayout(FrameLayout.java:444)
07-19 00:52:49.338: E/AndroidRuntime(15556):    at android.view.View.layout(View.java:11390)
07-19 00:52:49.338: E/AndroidRuntime(15556):    at android.view.ViewGroup.layout(ViewGroup.java:4332)
07-19 00:52:49.338: E/AndroidRuntime(15556):    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1653)
07-19 00:52:49.338: E/AndroidRuntime(15556):    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1511)
07-19 00:52:49.338: E/AndroidRuntime(15556):    at android.widget.LinearLayout.onLayout(LinearLayout.java:1416)
07-19 00:52:49.338: E/AndroidRuntime(15556):    at android.view.View.layout(View.java:11390)
07-19 00:52:49.338: E/AndroidRuntime(15556):    at android.view.ViewGroup.layout(ViewGroup.java:4332)
07-19 00:52:49.338: E/AndroidRuntime(15556):    at android.widget.FrameLayout.onLayout(FrameLayout.java:444)
07-19 00:52:49.338: E/AndroidRuntime(15556):    at android.view.View.layout(View.java:11390)
07-19 00:52:49.338: E/AndroidRuntime(15556):    at android.view.ViewGroup.layout(ViewGroup.java:4332)
07-19 00:52:49.338: E/AndroidRuntime(15556):    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1490)
07-19 00:52:49.338: E/AndroidRuntime(15556):    at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2455)
07-19 00:52:49.338: E/AndroidRuntime(15556):    at android.os.Handler.dispatchMessage(Handler.java:99)
07-19 00:52:49.338: E/AndroidRuntime(15556):    at android.os.Looper.loop(Looper.java:137)
07-19 00:52:49.338: E/AndroidRuntime(15556):    at android.app.ActivityThread.main(ActivityThread.java:4424)
07-19 00:52:49.338: E/AndroidRuntime(15556):    at java.lang.reflect.Method.invokeNative(Native Method)
07-19 00:52:49.338: E/AndroidRuntime(15556):    at java.lang.reflect.Method.invoke(Method.java:511)
07-19 00:52:49.338: E/AndroidRuntime(15556):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:817)
07-19 00:52:49.338: E/AndroidRuntime(15556):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)
07-19 00:52:49.338: E/AndroidRuntime(15556):    at dalvik.system.NativeStart.main(Native Method)

更新

当我回滚到22.2.0时,错误就消失了,不确定问题出在哪里。


22.2.1更新已发布? - Eenvincible
@Eenvincible 是的,昨天发布了:https://plus.google.com/+AndroidDevelopers/posts/XTtNCPviwpj - Mikhail
是的,还有新问题。上周我更新了新库后遇到了不同的问题,现在又出现了新问题。 - Psypher
上一次更新出现了这个问题 https://dev59.com/eYzda4cB1Zd3GeqPtPXx#31432568 - Psypher
@JaredBurrows,我不得不这样做,因为在最后一次更新中,我遇到了一个异常,浪费了两天时间来尝试解决这个问题。这就是问题所在:https://dev59.com/eYzda4cB1Zd3GeqPtPXx#31432568 - Psypher
显示剩余5条评论
2个回答

8
这个问题与NavigationView菜单xml有关。
我的xml看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
            android:id="@+id/navigation_subheader"
            android:title="Titulo">
        <menu>
            <item
                    android:id="@+id/navigation_sub_item_1"
                    android:icon="@drawable/abc_btn_radio_material"
                    android:title="sub-1"/>
            <item
                    android:id="@+id/navigation_sub_item_2"
                    android:icon="@drawable/abc_btn_rating_star_on_mtrl_alpha"
                    android:title="sub-2"/>
        </menu>
    </item>
</menu>

但是如果我切换到项目可绘制图标,它就被固定了:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
            android:id="@+id/navigation_subheader"
            android:title="Titulo">
        <menu>
            <item
                    android:id="@+id/navigation_sub_item_1"
              ----> android:icon="@drawable/some_local_drawable"
                    android:title="sub-1"/>
            <item
                    android:id="@+id/navigation_sub_item_2"
              ----> android:icon="@drawable/some_local_drawable"
                    android:title="sub-2"/>
        </menu>
    </item>
</menu>

当然,这发生在更新到22.2.1之后。

让我试一下。对答案加1。 - Psypher
这个已经可以工作了,谢谢。我会等待下一个更新和随之而来的问题 :) - Psypher
2
你永远不应该使用 abc_ 图标。始终提供自己的图标,因为那些是库的一部分。 - Jared Burrows
现在我知道了。 :) - Psypher
@Jared,就我的情况而言,Android Studio模板自动生成了这些引用。 - Cheborra

0

我曾经遇到过同样的问题,但是通过这段代码我成功地避免了它:

View header = LayoutInflater.from(this).inflate(R.layout.nav_header_main, null);
navigationView.addHeaderView(header);
TextView text = (TextView) header.findViewById(R.id.textView);
texto.setText("HELLO");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接