java.lang.NullPointerException 在 android.support.v4.view.ViewCompatHC.setAlpha(ViewCompatHC.java :101)

标签 java android nullpointerexception android-studio

我收到以下错误:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myapp/com.example.myapp.MyActivity}:
java.lang.NullPointerException
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2292)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2350)
            at android.app.ActivityThread.access$800(ActivityThread.java:163)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1257)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:157)
            at android.app.ActivityThread.main(ActivityThread.java:5335)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.NullPointerException
            at android.support.v4.view.ViewCompatHC.setAlpha(ViewCompatHC.java:101)
            at android.support.v4.view.ViewCompat$HCViewCompatImpl.setAlpha(ViewCompat.java:811)
            at android.support.v4.view.ViewCompat.setAlpha(ViewCompat.java:1978)
            at com.example.myapp.MyActivity.onCreate(MyActivity.java:93)
            at android.app.Activity.performCreate(Activity.java:5389)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2256)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2350)
            at android.app.ActivityThread.access$800(ActivityThread.java:163)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1257)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:157)
            at android.app.ActivityThread.main(ActivityThread.java:5335)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
            at dalvik.system.NativeStart.main(Native Method)

这是我的 onCreate block ,其中抛出错误:

@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);

   mMinHeaderHeight = getResources().getDimensionPixelSize(R.dimen.min_header_height);
   mHeaderHeight = getResources().getDimensionPixelSize(R.dimen.header_height);
   mMinHeaderTranslation = -mMinHeaderHeight + getActionBarHeight();

   setContentView(R.layout.activity_profile);

   mHeaderPicture = (KenSupportView) findViewById(R.id.header_picture);
   mHeaderPicture.setResourceIds(R.drawable.default_bg_1, R.drawable.default_bg_2);
   mHeaderLogo = (ImageView) findViewById(R.id.header_logo);
   mHeader = findViewById(R.id.header);

   mPagerSlidingTabStrip = (PagerSlidingTabStrip) findViewById(R.id.tabs);
   mViewPager = (ViewPager) findViewById(R.id.pager);
   mViewPager.setOffscreenPageLimit(4);

   mPagerAdapter = new PagerAdapter(getSupportFragmentManager());
   mPagerAdapter.setTabHolderScrollingContent(this);

   mViewPager.setAdapter(mPagerAdapter);

   mPagerSlidingTabStrip.setViewPager(mViewPager);
   mPagerSlidingTabStrip.setOnPageChangeListener(this);
   mSpannableString = new SpannableString(getString(R.string.actionbar_title));
   mAlphaForegroundColorSpan = new AlphaForegroundColorSpan(0xffffffff);

   ViewCompat.setAlpha(getActionBarIconView(), 0f); // error here

   getSupportActionBar().setBackgroundDrawable(null);
}

以及getActionBarIconView()的方法 block :

    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
  private ImageView getActionBarIconView() {

   if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){
       return (ImageView)findViewById(android.R.id.home);
   }

   return (ImageView)findViewById(android.support.v7.appcompat.R.id.home);
  }

构建.gradle:

 android {
     compileSdkVersion 21
     buildToolsVersion '20.0.0'

     defaultConfig {
         applicationId "com.example.myapp"
         minSdkVersion 15
         targetSdkVersion 20
         versionCode 1
         versionName "1.0"
     }
     buildTypes {
         release {
             runProguard false
             proguardFiles getDefaultProguardFile('proguard-android.txt'),
            'proguard-rules.pro'
         }
     }
 }

当我记录错误时,我不确定为什么当 R.id.home 解析为整数 16908332 时它会抛出空指针异常。我还确保 setContentView 排在第一位。

有人可以帮忙吗?

最佳答案

Material Design Action Bar 在 AppCompat v21 中发生了巨大变化现在基于工具栏的概念:

In this release, Android introduces a new Toolbar widget. This is a generalization of the Action Bar pattern that gives you much more control and flexibility. Toolbar is a view in your hierarchy just like any other, making it easier to interleave with the rest of your views, animate it, and react to scroll events. You can also set it as your Activity’s action bar, meaning that your standard options menu actions will be display within it.

这也意味着 AppCompat 不再在任何 API 级别上使用系统提供的操作栏:它始终创建一个设置为操作栏的自定义工具栏。根据 Toolbar文档:

In modern Android UIs developers should lean more on a visually distinct color scheme for toolbars than on their application icon. The use of application icon plus title as a standard layout is discouraged on API 21 devices and newer.

默认情况下,工具栏(以及使用 AppCompat 时的任何操作栏)没有有任何应用程序图标,因此 getActionBarIconView() 返回 null。

关于java.lang.NullPointerException 在 android.support.v4.view.ViewCompatHC.setAlpha(ViewCompatHC.java :101),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26570353/

相关文章:

java - 仅在启动时启动时绑定(bind)异常 [Raspbian]

java - 避免索引越界异常

java - Android/Java 混音和静音

java - 在validation.xml中添加SpringWebConstraintValidatorFactory时出现StackOverflowError

java - 在 JFrame 上绘画是可行的,但它无论如何都会抛出 NullPointerException

java - 什么是NullPointerException,我该如何解决?

java - 平方和差 - 我的方法有什么问题?

Java - DataOutputStream 的 writeLong 方法和写入十六进制

java - 更改每个列表元素的 ArrayList<?> 标记

使用 PLATFORM key 签名的 Android APK 未授予系统权限?