【问题标题】:You must pass in a non null View你必须传入一个非空视图
【发布时间】:2015-10-16 17:14:38
【问题描述】:

我最近将我的项目更新到 Android 支持库 23.1,我的这部分代码现在出现错误。

它在更新之前就可以工作,并且仅注释掉这部分让我可以正常运行应用程序。到底有什么问题或有什么变化?

Glide.with(getApplicationContext())
            .load(R.drawable.banner)
            .fitCenter()
            .override(width, height / 2)
            .diskCacheStrategy(DiskCacheStrategy.RESULT)
            .into(back);

    if (picture != null) {
        Glide.with(getApplicationContext())
                .load(picture)
                .fitCenter()
                .override(width / 2, height / 2)
                .into(profile);
    } else {
        Glide.with(getApplicationContext())
                .load(R.drawable.profile_p)
                .fitCenter()
                .override(width / 2, height / 2)
                .into(profile);
    }

这是错误日志。

    10-16 22:41:27.238 16313-16313/atsystems.cal E/AndroidRuntime: FATAL EXCEPTION: main
10-16 22:41:27.238 16313-16313/atsystems.cal E/AndroidRuntime: Process: atsystems.cal, PID: 16313
10-16 22:41:27.238 16313-16313/atsystems.cal E/AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{atsystems.cal/atsystems.cal.MainActivity}: java.lang.IllegalArgumentException: You must pass in a non null View
10-16 22:41:27.238 16313-16313/atsystems.cal E/AndroidRuntime:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
10-16 22:41:27.238 16313-16313/atsystems.cal E/AndroidRuntime:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
10-16 22:41:27.238 16313-16313/atsystems.cal E/AndroidRuntime:     at android.app.ActivityThread.access$800(ActivityThread.java:151)
10-16 22:41:27.238 16313-16313/atsystems.cal E/AndroidRuntime:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
10-16 22:41:27.238 16313-16313/atsystems.cal E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:102)
10-16 22:41:27.238 16313-16313/atsystems.cal E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:135)
10-16 22:41:27.238 16313-16313/atsystems.cal E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5254)
10-16 22:41:27.238 16313-16313/atsystems.cal E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Native Method)
10-16 22:41:27.238 16313-16313/atsystems.cal E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:372)
10-16 22:41:27.238 16313-16313/atsystems.cal E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
10-16 22:41:27.238 16313-16313/atsystems.cal E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
10-16 22:41:27.238 16313-16313/atsystems.cal E/AndroidRuntime:  Caused by: java.lang.IllegalArgumentException: You must pass in a non null View
10-16 22:41:27.238 16313-16313/atsystems.cal E/AndroidRuntime:     at com.bumptech.glide.GenericRequestBuilder.into(GenericRequestBuilder.java:678)
10-16 22:41:27.238 16313-16313/atsystems.cal E/AndroidRuntime:     at com.bumptech.glide.DrawableRequestBuilder.into(DrawableRequestBuilder.java:448)
10-16 22:41:27.238 16313-16313/atsystems.cal E/AndroidRuntime:     at atsystems.cal.MainActivity.onCreate(MainActivity.java:74)
10-16 22:41:27.238 16313-16313/atsystems.cal E/AndroidRuntime:     at android.app.Activity.performCreate(Activity.java:5990)
10-16 22:41:27.238 16313-16313/atsystems.cal E/AndroidRuntime:     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
10-16 22:41:27.238 16313-16313/atsystems.cal E/AndroidRuntime:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
10-16 22:41:27.238 16313-16313/atsystems.cal E/AndroidRuntime:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
10-16 22:41:27.238 16313-16313/atsystems.cal E/AndroidRuntime:     at android.app.ActivityThread.access$800(ActivityThread.java:151) 
10-16 22:41:27.238 16313-16313/atsystems.cal E/AndroidRuntime:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
10-16 22:41:27.238 16313-16313/atsystems.cal E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:102) 
10-16 22:41:27.238 16313-16313/atsystems.cal E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:135) 
10-16 22:41:27.238 16313-16313/atsystems.cal E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5254) 
10-16 22:41:27.238 16313-16313/atsystems.cal E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Native Method) 
10-16 22:41:27.238 16313-16313/atsystems.cal E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:372) 
10-16 22:41:27.238 16313-16313/atsystems.cal E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
10-16 22:41:27.238 16313-16313/atsystems.cal E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 

我正在使用包含导航视图的导航抽屉布局。此导航视图包含我显示的标题布局,事实证明我注释掉的代码用于显示标题布局的图片。所以有什么在新库更新中发生了变化?

【问题讨论】:

  • 检查并确保 'back' 和 'profile' 不为空。
  • 请检查 mainActivity 的第 74 行,因为这是您的错误所在。
  • 在 23.1.0 更新之前完全相同的代码工作,我也恢复并检查了。似乎导航视图的 app:headerLayout 功能出现问题,找不到标题布局了.

标签: android view navigation android-appcompat drawer


【解决方案1】:

导航视图似乎存在问题。 NavigationView findViewById can't find header view

当前的修复/解决方法是使用查找标题布局。

final NavigationView mNavigationView = (NavigationView) findViewById(R.id.navigation_view);
    final View headerLayout = mNavigationView.inflateHeaderView(R.layout.header);

完成后,您可以像这样引用标题布局中的每个元素。

final ImageView profile = (ImageView) headerLayout.findViewById(R.id.profile_image);

【讨论】:

    【解决方案2】:

    裘德的回答是正确的;但如果您不想再次膨胀标题视图,请尝试此版本:

    final NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
    final View header = navigationView.getHeaderView(0);
    final ImageView imageView = (ImageView) header.findViewById(R.id.image);
    

    【讨论】:

    • 感谢您提供此代码 sn-p,它可能会提供一些有限的即时帮助。 proper explanation 将通过展示为什么这是解决问题的好方法,并使其对有其他类似问题的未来读者更有用,从而大大提高其长期价值。请edit您的回答添加一些解释,包括您所做的假设。
    猜你喜欢
    • 2019-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 2010-09-07
    • 2013-05-07
    • 2018-09-20
    • 1970-01-01
    相关资源
    最近更新 更多