Я недавно обновил свои версии 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