java.lang.UnsupportedOperationException: Невозможно преобразовать значение в индексе 5 в цвет: type=0x5

Мое приложение падает после обновления до Android Studio 3 RC1 (Gradle 4, Android Gradle плагин 3 RC2).

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

У меня не было этой проблемы до обновления (на Android Studio 2). Это также описано на github, но нет ответа.

5 ответов

+ Изменить
compile 'com.viewpagerindicator:library:2.4.1@aar'

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

Это сработает. Есть проблема с библиотекой.

Мой проект использует плагин Android Gradle 3.0 и CompileSdk 27. Я не смог заставить его работать с этой настройкой, используя предложенные решения (compile 'com.github.JakeWharton:ViewPagerIndicator:2.4.1') в этой теме.

Он жаловался на такие методы, как ViewPager#removeOnPageChangeListener не существует, которые были добавлены в версию 24 библиотеки поддержки. Я думаю, что это связано с тем, что в библиотеке есть android-support-v4.jar, непосредственно запеченный в.

Я не хотел просматривать все мои xml-файлы и устанавливать атрибуты программно, поэтому в итоге я создал форк, который использует gradle для сборки библиотеки и доводит compileSdk/minSdk/support-v4 до более современных версий.

Вы можете найти проект здесь https://github.com/splatte/ViewPagerIndicator

Чтобы использовать его в своем проекте, получите его из jitpack так:

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

а потом:

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

(Должен быть другой проект, который делает это в море 4.300 вилок, которые есть у ViewPagerIndicator, но я не знал, как его найти.)

compile 'com.github.JakeWharton:ViewPagerIndicator:2.4.1' с помощью jitpack.io не работал для меня с плагином Android Gradle 3.0.

Вместо этого мне пришлось программно установить все атрибуты представления, которые я ранее установил в макете xml с помощью cpi: (или же app:) атрибуты.

пример

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

Я удалил все cpi: атрибуты и установите их все программно:

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

Я нашел jitpack.io самый простой способ:

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

а потом:

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

Просто чтобы отметить, что наличие 2 версий библиотеки поддержки V4 сломало его, пока я не исключил одну из них

Что ж, библиотека не обновлялась уже долгое время, поэтому в настоящее время она создает много проблем в обновленном SDK, поэтому вам необходимо заменить библиотеку ниже

///// старая библиотека

      implementation 'com.github.JakeWharton:ViewPagerIndicator:2.4.1'

// заменил его на приведенный ниже //для индикатора просмотра страницы

      implementation 'com.github.splatte:ViewPagerIndicator:3.0.0'

это будет работать, если нет, пожалуйста, не забудьте добавить

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

// помещаем его в файл settings.gradle

Другие вопросы по тегам