Java.lang.NullPointerException sur Android.soutien.v4.vue.ViewCompatHC.setAlpha(ViewCompatHC.java: 101)


Je reçois l'erreur suivante:

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)

Voici mon bloc OnCreate d'où provient l'erreur:

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

Et le bloc de méthode pour 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);
  }

Construire.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'
         }
     }
 }

Je ne sais pas pourquoi il lance une exception de pointeur null lorsque R. id.home se résout en entier 16908332 lorsque j'enregistre l'erreur. J'ai également veillé à ce que setContentView vienne en premier.

Quelqu'un pourrait-il gentiment aider?

Author: revvy, 2014-10-26

1 answers

La barre d'action Material Design a radicalement changé dans AppCompat v21 et est maintenant basée sur le concept d'une barre d'outils:

Dans cette version, Android introduit un nouveau widget Toolbar . Il s'agit d'une généralisation du modèle de barre d'action qui vous donne beaucoup plus de contrôle et de flexibilité. La barre d'outils est une vue dans votre hiérarchie comme n'importe quelle autre, ce qui facilite l'entrelacement avec le reste de vos vues, l'animation et la réaction aux événements de défilement. Vous pouvez également définir il en tant que barre d'action de votre activité, ce qui signifie que vos actions de menu d'options standard seront affichées à l'intérieur.

Cela signifie également qu'AppCompat n'utilise plus la Barre d'action fournie par le système à n'importe quel niveau d'API: il crée toujours une barre d'outils personnalisée qui est définie comme Barre d'action. Selon la documentation Toolbar :

Dans les interfaces utilisateur Android modernes, les développeurs devraient s'appuyer davantage sur un schéma de couleurs visuellement distinct pour les barres d'outils que sur l'icône de leur application. L'utilisation de l'icône d'application plus le titre en tant que mise en page standard est déconseillée sur les appareils API 21 et plus récents.

Par défaut, la barre d'outils (et donc toute Barre d'action lors de l'utilisation d'AppCompat) n'a pas d'icône d'application, d'où la raison pour laquelle getActionBarIconView() renvoie null.

 1
Author: ianhanniballake, 2014-10-26 15:59:30