Странный сбой инфляции после обновления Android Studio и Gradle версии - PullRequest
0 голосов
/ 16 мая 2018

Я недавно обновил свои версии Android Studio и Gradle (точные версии и контекст см. Ниже).Сразу после обновления приложение начало сбой (100% времени) при попытке раздувать макет по следующей причине:

 Caused by: java.lang.NumberFormatException: For input string: "3.5"
    at java.lang.Integer.parseInt(Integer.java:608)
    at com.android.internal.util.XmlUtils.convertValueToInt(XmlUtils.java:133)
    at android.content.res.TypedArray.getInt(TypedArray.java:375)
    at com.nirhart.parallaxscroll.views.ParallaxScrollView.init(ParallaxScrollView.java:45)
    at com.nirhart.parallaxscroll.views.ParallaxScrollView.<init>(ParallaxScrollView.java:28)
    at net.chinookbook.android.widget.CBParallaxScrollView.<init>(CBParallaxScrollView.java:19)

Виджет, который не может быть раздувается, выглядит так в xml макета:

<net.chinookbook.android.widget.CBParallaxScrollView
    android:id="@+id/scroll"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:fillViewport="true"
    app:parallax_factor="3.5">

Декларируемым объявлением является

<declare-styleable name="ParallaxScroll">
    <attr name="parallax_factor" format="float" />
    <attr name="alpha_factor" format="float" />
    <attr name="inner_parallax_factor" format="float" />
    <attr name="parallax_views_num" format="integer" />
    <attr name="circular_parallax" format="boolean" />
</declare-styleable>

со следующими сгенерированными ресурсами:

public static final class styleable {
    public static final int[] ParallaxScroll = { 0x7f040028, 0x7f04007c, 0x7f040101, 0x7f040172, 0x7f040173 };
    public static final int ParallaxScroll_alpha_factor = 0;
    public static final int ParallaxScroll_circular_parallax = 1;
    public static final int ParallaxScroll_inner_parallax_factor = 2;
    public static final int ParallaxScroll_parallax_factor = 3;
    public static final int ParallaxScroll_parallax_views_num = 4;
}

ParallaxScrollView.init () метод таков:

protected void init(Context context, AttributeSet attrs) {
    TypedArray typeArray = context.obtainStyledAttributes(attrs, R.styleable.ParallaxScroll);
    this.parallaxFactor = typeArray.getFloat(R.styleable.ParallaxScroll_parallax_factor, DEFAULT_PARALLAX_FACTOR);
    this.alphaFactor = typeArray.getFloat(R.styleable.ParallaxScroll_alpha_factor, DEFAULT_ALPHA_FACTOR);
    this.innerParallaxFactor = typeArray.getFloat(R.styleable.ParallaxScroll_inner_parallax_factor, DEFAULT_INNER_PARALLAX_FACTOR);
    this.numOfParallaxViews = typeArray.getInt(R.styleable.ParallaxScroll_parallax_views_num, DEFAULT_PARALLAX_VIEWS);
    typeArray.recycle();
}

А теперь, для странной части, наблюдаемой при отладке кода: остановка отладчика в строке:

typeArray.getFloat(R.styleable.ParallaxScroll_parallax_factor, DEFAULT_PARALLAX_FACTOR);

Я вижу, что метод обыть вызванным так (это то, что оценивает отладчик) - что выглядит правильно: typeArray.getFloat (3, 1.9F) .Но затем я вхожу в метод

public float getFloat(@StyleableRes int index, float defValue)

и, к моему удивлению, index = 0 и defValue = 1.9 .Приложение не аварийно завершает работу, это происходит в следующей строке:

typeArray.getInt(R.styleable.ParallaxScroll_parallax_views_num, DEFAULT_PARALLAX_VIEWS)

, которая должна вызываться с typeArray.getInt (4, 1) , но когда я вступаю вснова метод

public int getInt(@StyleableRes int index, int defValue)

, к моему удивлению, значения параметров: index = 3 и defValue = 1 .На этот раз приложение завершится сбоем, потому что настраиваемый ресурс с индексом 3 - это parallax_factor , который определен как 3.5 и не может быть прочитан как int.

Итак, мой вопрос, какможет ли это выглядеть так, будто метод будет вызываться с некоторыми (первичными) значениями, а затем фактически вызываться с другими значениями.Что мне не хватает? Примечание: ParallaxScrollView импортируется из внешней библиотеки

=====================================================
Среда:

Android Studio: 3.1.2
Gradle: 3.1.2 (обновление с 2.3.3)
Обертка Gradle: 4.4 (обновление с 3.3)

compileSdkVersion 27
buildToolsVersion 27.0.3
minSdkVersion 16
targetSdkVersion 27
multiDexEnabled true
com.android.support:мультидекс: 1.0.3 (обновление с 1.0.1)
com.github.nirhart: параллаксскролл: 1.0

...