2017-10-20 41 views
21

Mon application se bloque après la mise à jour Android Studio 3 RC1 (Gradle 4, plug-in Android Gradle 3 RC2).java.lang.UnsupportedOperationException: Impossible de convertir la valeur à l'index 5 à la couleur: type = 0x5

This is the error I am having: 
java.lang.RuntimeException: Unable to start activity ComponentInfo{*****}: 
android.view.InflateException: Binary XML file line #0: Binary XML file line #0: 
Error inflating class com.viewpagerindicator.CirclePageIndicator 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892) 
     at android.app.ActivityThread.-wrap11(Unknown Source:0) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593) 
     at android.os.Handler.dispatchMessage(Handler.java:105) 
     at android.os.Looper.loop(Looper.java:164) 
     at android.app.ActivityThread.main(ActivityThread.java:6541) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 
    Caused by: android.view.InflateException: Binary XML file line #0: Binary XML file line #0: Error inflating class com.viewpagerindicator.CirclePageIndicator 
    Caused by: android.view.InflateException: Binary XML file line #0: Error inflating class com.viewpagerindicator.CirclePageIndicator 
    Caused by: java.lang.reflect.InvocationTargetException 
     at java.lang.reflect.Constructor.newInstance0(Native Method) 
     at java.lang.reflect.Constructor.newInstance(Constructor.java:334) 
     at android.view.LayoutInflater.createView(LayoutInflater.java:647) 
     at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.createCustomViewInternal(CalligraphyLayoutInflater.java:211) 
     at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.access$000(CalligraphyLayoutInflater.java:20) 
     at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater$PrivateWrapperFactory2.onCreateView(CalligraphyLayoutInflater.java:302) 
     at android.view.LayoutInflater$FactoryMerger.onCreateView(LayoutInflater.java:186) 
     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:780) 
     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730) 
     at android.view.LayoutInflater.rInflate(LayoutInflater.java:863) 
     at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824) 
     at android.view.LayoutInflater.rInflate(LayoutInflater.java:866) 
     at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824) 
     at android.view.LayoutInflater.rInflate(LayoutInflater.java:866) 
     at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824) 
     at android.view.LayoutInflater.inflate(LayoutInflater.java:515) 
     at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.inflate(CalligraphyLayoutInflater.java:60) 
     at android.view.LayoutInflater.inflate(LayoutInflater.java:423) 
     at android.view.LayoutInflater.inflate(LayoutInflater.java:374) 
     at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:287) 
     at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139) 
     at com.raimbekov.android.sajde.zikr.ZikrActivity.onCreate(ZikrActivity.java:195) 
     at android.app.Activity.performCreate(Activity.java:6975) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892) 
     at android.app.ActivityThread.-wrap11(Unknown Source:0) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593) 
     at android.os.Handler.dispatchMessage(Handler.java:105) 
     at android.os.Looper.loop(Looper.java:164) 
     at android.app.ActivityThread.main(ActivityThread.java:6541) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 
    Caused by: java.lang.UnsupportedOperationException: Can't convert value at index 5 to color: type=0x5 
    10-20 10:48:09.562 6156-6156 E/AndroidRuntime:  at android.content.res.TypedArray.getColor(TypedArray.java:473) 
     at com.viewpagerindicator.CirclePageIndicator.<init>(CirclePageIndicator.java:96) 
     at com.viewpagerindicator.CirclePageIndicator.<init>(CirclePageIndicator.java:72) 
      ... 34 more 

Je n'ai pas eu ce problème avant la mise à jour (sur Android Studio 2). Il est également décrit sur github, mais pas de réponse.

+0

Postez votre fichier de configuration? – Neeraj

+1

Ce code (CirclePageIndicator) n'a pas été mis à jour depuis 5 ans. Sur API <21, vous ne pouvez pas utiliser attrs pour colorier dans le format XML. Il suffit donc d'utiliser une référence à une ressource de couleur (@ color/YOURS_COLOR) ou d'utiliser le format #RGB. Vous devrez probablement changer:: Bibliothèque JakeWharton/ViewPagerIndicator. –

+0

@JonGoodwin merci. Je n'utilise pas attr. Mes couleurs sont définies dans les styles comme RVB et cela fonctionne parfaitement sur l'API 15. –

Répondre

20

changement
compile 'com.viewpagerindicator:library:[email protected]'

à
compile 'com.github.JakeWharton:ViewPagerIndicator:2.4.1'

ça va marcher. Il y a un problème avec la bibliothèque.

+0

Fonctionne comme un charme - merci! – dipdipdip

+0

Comment cela résout-il réellement? Je n'ai pas travaillé dans mon cas mais je me demande quelle différence cela fait réellement. –

+0

c'est un problème avec "compile" com.viewpagerindicator: bibliothèque: [email protected] '"bibliothèque ... il lit un tableau de couleurs, et n'a pas pu trouver un index particulier ... ce bug est corrigé dans" compile 'com.github.JakeWharton: ViewPagerIndicator: 2.4.1' 'bibliothèque ... quelle bibliothèque utilisez-vous? –

5

compile 'com.github.JakeWharton:ViewPagerIndicator:2.4.1' en utilisant jitpack.io n'a pas fonctionné pour moi avec le plugin android gradle 3.0. Au lieu de cela, j'ai dû définir par programme tous les attributs de vue que j'avais précédemment définis dans la mise en page xml avec les attributs cpi: (ou app:).

Exemple

<com.viewpagerindicator.CirclePageIndicator 
    cpi:fillColor="@color/azure" 
    cpi:pageColor="@color/white" 
    cpi:radius="4dp" 
    cpi:snap="true" 
    cpi:strokeWidth="0dp" /> 

J'ai enlevé tous les attributs cpi: et les mettre tous programme:

circlePageIndicator.setFillColor(ContextCompat.getColor(getContext(), R.color.azure)); 
circlePageIndicator.setPageColor(ContextCompat.getColor(getContext(), R.color.white)); 
circlePageIndicator.setRadius((int) (4 * Resources.getSystem().getDisplayMetrics().density)); 
circlePageIndicator.setSnap(true); 
circlePageIndicator.setStrokeWidth(0); 
2

J'ai trouvé la jitpack.io la méthode la plus simple:

allprojects { 
    repositories { 
     maven { url "https://jitpack.io" } 
    } 
} 

puis :

dependencies { 
    implementation ('com.github.JakeWharton:ViewPagerIndicator:2.4.1'){ 
    exclude module: 'support-v4' 
    } 
} 

Juste pour noter que d'avoir 2 versions de la bibliothèque V4 de soutien, il a cassé jusqu'à ce que j'exclus l'un d'entre eux

2

Mon projet utilise le plugin Android gradle 3.0 et compileSdk 27. Je n'ai pas pu le faire fonctionner avec cette configuration en utilisant les solutions suggérées (compile 'com.github.JakeWharton:ViewPagerIndicator:2.4.1') dans ce fil.

Il se plaignait de méthodes telles que ViewPager#removeOnPageChangeListener qui n'existaient pas et qui ont été ajoutées dans la version 24 de la bibliothèque de support. Je pense que cela a à voir avec le fait que la bibliothèque a android-support-v4.jar directement cuit po

Je ne voulais pas passer en revue tous mes fichiers XML et définir les attributs par programme, donc j'ai fini par créer une fourche qui utilise gradle pour construire la librairie et qui compile compileSdk/minSdk/support-v4 vers des versions plus modernes.

Vous pouvez trouver le projet ici https://github.com/splatte/ViewPagerIndicator

Pour l'utiliser dans votre projet, obtenir de jitpack comme ceci:

allprojects { 
    repositories { 
     maven { url "https://jitpack.io" } 
    } 
} 

puis:

dependencies { 
    implementation 'com.github.splatte:ViewPagerIndicator:3.0.0' 
} 

(Il doit y avoir un autre projet qui fait cela dans la mer de 4.300 fourches que ViewPagerIndicator a, mais je ne savais pas comment le trouver.