Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

data binding - safeUnbox warning

after i upgrade AS gradle version to 2.3.0, data binding encounter a warning :

Warning:selectMap[index] is a boxed field but needs to be un-boxed to execute selectMap[index] ? @android:color/white : @android:color/transparent. This may cause NPE so Data Binding will safely unbox it. You can change the expression and explicitly wrap selectMap[index] with safeUnbox() to prevent the warning

selectMap is an ObservableMap, then i search this warning but got just few discussions and did not fix it

Android Studio 2.3.0-alpha1: Databinding + int unboxing causes compile errors

Databinding - data object is null on API 15-18

I follow the way in the links, modify selectMap[index] to safeUnbox(selectMap[index]) but got syntax error.

So anyone know how to fix this warning?


Edit : Here is the xml file code

<?xml version="1.0" encoding="utf-8"?> 

<data class="SupportCountryViewHolderBinding">      <variable         name="viewModel"         type="com.goodarc.care_about.activity.account.support_country.SupportCountryHolderViewModel" />      <variable         name="dataSource"         type="com.goodarc.care_about.module.assets_file.SupportCountry" />      <variable         name="selectMap"         type="android.databinding.ObservableMap&lt;Integer, Boolean&gt;" />      <variable         name="index"         type="int" /> </data>  <LinearLayout     android:layout_width="match_parent"     android:layout_height="wrap_content"     android:background="@{selectMap[index] ? @android:color/white : @android:color/transparent}"     android:onClick="@{(v) -> viewModel.onItemSelectListener(selectMap, index)}"     android:orientation="vertical"     android:padding="20dp">      <TextView         style="@style/TitleLabel2"         android:layout_gravity="center_vertical|start"         android:text="@{dataSource.display}"         android:textColor="@{selectMap[index] ? @android:color/black : @android:color/white}"         tools:text="Taiwan (+886)" /> </LinearLayout> 

Build is succeed, but warning come out(i past above).

like image 401
Ivan Avatar asked Mar 18 '17 08:03

Ivan


People also ask

What is the benefit of data binding in Android?

Using data binding can lead to faster development times, faster execution times and more readable and maintained code. Android data binding generates binding classes at compile time for layouts.

What is data binding used for?

In Android, the Data Binding Library is a support library that allows you to bind UI components in your layouts to data sources in your app using a declarative format rather than programmatically.

Is data binding necessary?

The necessary to use data binding in a given view is to add the label <layout> in XML in which we want to use it. For each XML that includes the <layout> tag, a class is generated with the name of the XML and the suffix "Binding".


1 Answers

I had the same warning, in my case changing the variable declaration from Boolean type to boolean type solve the problem:

From:

<variable         name="readOnly"         type="Boolean" /> 

To:

<variable         name="readOnly"         type="boolean" /> 

So, maybe you can try with:

<variable     name="selectMap"     type="android.databinding.ObservableMap&lt;Integer, boolean&gt;" /> 
like image 75
Leandro D'Onofrio Avatar answered Sep 30 '22 11:09

Leandro D'Onofrio