Привязка данных Android «Отсутствует выражение импорта, хотя оно зарегистрировано» после обновления до Gradle 5.0 - PullRequest
24 голосов
/ 19 апреля 2019

После того, как я обновил свою Android-студию до 3.4, Android Gradle Plugin до 3.4 и gradle до 5.1.1

Я получил ошибки привязки данных, как показано ниже

Я удостоверился, что я очистил проекти восстановить, я очистил кэш и перезапустил AS.

Эта проблема никогда не возникала до обновления

Я могу подтвердить, что это из-за нового обновления gradle

DataBinderMapperImpl.java: 54: ошибка: не удается найти символ

e: [kapt] Произошло исключение: android.databinding.tool.util.LtilgedErrorException: Обнаружены ошибки привязки данных.**** / ошибка привязки данных **** msg: Отсутствует выражение импорта, хотя оно зарегистрировано

Я нашел решение: Решение:

  1. Сейчас3.4.1 выпущено, используйте 3.4.1
  2. Удалить все типы импорта в макете XML
  3. Удалить все строки из типа импорта в макете XML
  4. Удалить все целые числа из типа импорта вмакет XML

Ответы [ 3 ]

53 голосов
/ 20 апреля 2019

После того, как я обновил свой Android studio и плагин Gradle, я столкнулся с подобной проблемой из-за строки ниже. Я использовал это <import type="java.lang.String" /> в моем файле макета. Удаление этого импорта решило проблему.

Как и в управляемом коде, java.lang. * Импортируется автоматически.

1 голос
/ 20 апреля 2019

Я также сталкиваюсь с этими ошибками в привязке данных. Я попытался с 'android.databinding.enableV2 = true', это не работает. После того, как я переделал привязку данных для layout.xml, я нашел эти решения. если я использую android.view.View в layout.xml, я импортировал View и объявил переменную следующим образом:

<data>
    <import type="java.util.List" />        
    <import type="android.view.View" />
    <import type="com.example.android.mobilepos.data.pojos.ActionData" />
    <variable
        name="view"
        type="View" />
    <variable  name="actionList"  type="java.util.List&lt;com.example.android.mobilepos.data.pojos.ActionData>" />

И использовал переменную view вот так.

 <EditText
   android:layout_width="wrap_content"
   android:layout_height="wrap_content" 
   android:id="@+id/txt_payment_remark"                           
   android:hint="@string/hint_payment_remark"                            
   android:visibility="@{switch1.checked ? view.VISIBLE : view.GONE}" />
 <androidx.recyclerview.widget.RecyclerView
                android:id="@+id/action_data_list"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@color/color_white"
                android:focusable="true"
                android:clickable="true"
                app:actionSource="@{actionList}"
              app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"                    app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior"
                tools:context=".ui.fragments.NewInvoiceFragment"
                tools:listitem="@layout/fragment_new_invoice">

Я также сделал это для функции Integer.toString (), но не могу импортировать и использовать Integer в layout.xml. Поэтому я смещаю целочисленное значение в strings.xml с меткой% d.

 <EditText
     android:id="@+id/txt_qty"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"                        
     android:hint="@string/hint_quantity"
     android:inputType="number"
     android:maxLength="5"
     android:maxLines="1"
     android:singleLine="true"
     android:text="@{@string/shipment_qty(product.qty)}"
     android:textAlignment="center"
     android:textColor="@color/black"
     android:textStyle="bold"                        
     tools:text="1000" />

Я надеюсь, что это решит ваши проблемы.

0 голосов
/ 19 апреля 2019

Я предполагаю, что вы используете плагин Gradle версии 3.4 (а не 4.3, как вы упоминали в вопросе).См. Список доступных версий подключаемого модуля Gradle https://developer.android.com/studio/releases/gradle-plugin#updating-gradle. В параметре компилятора привязки данных есть изменения https://developer.android.com/topic/libraries/data-binding/start#preview-compiler

Чтобы включить новый компилятор привязки данных, добавьте следующую опцию в файл gradle.properties:

android.databinding.enableV2=true
...