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

时间:2014-10-26 06:18:10

标签: 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块,其中引发了错误:

@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()的方法块:

    @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);
  }

的build.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。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

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

  

在此版本中,Android引入了一个新的Toolbar小部件。这是Action Bar模式的概括,为您提供更多控制和灵活性。工具栏是层次结构中的视图,与其他视图一样,可以更轻松地与其余视图交错,为其设置动画并对滚动事件做出反应。您也可以将其设置为活动的操作栏,这意味着您的标准选项菜单操作将显示在其中。

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

  

在现代Android UI中,开发人员应该更多地依赖于工具栏的视觉上不同的颜色方案而不是应用程序图标。不鼓励在API 21设备和更新版本上使用应用程序图标和标题作为标准布局。

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