升级到gradle 5.0后,Android数据绑定“丢失导入表达虽然已注册”

问题描述 投票:21回答:3

将我的Android工作室升级到3.4后,将Android Gradle Plugin升级到3.4并将gradle升级到5.1.1

我得到了如下的数据绑定错误

我已确保清理项目并重建,我已清除缓存并重新启动AS。

此问题在升级之前从未发生过

我可以确认这是因为新的gradle更新

DataBinderMapperImpl.java:54:错误:找不到符号

e:[kapt]发生异常:android.databinding.tool.util.LoggedErrorException:发现数据绑定错误。 **** /数据绑定错误****消息:虽然已注册,但缺少导入表达式

我找到了解决方案:解决方案:

  1. 现在3.4.1发布,使用3.4.1
  2. 删除布局XML中的所有导入类型
  3. 从布局XML中的导入类型中删除所有字符串
  4. 从布局XML中的导入类型中删除所有整数
android android-gradle android-databinding androidx
3个回答
50
投票

在我升级了我的Android工作室和gradle插件后,由于以下行,我遇到了类似的问题。我在我的布局文件中使用了这个<import type="java.lang.String" />。删除此导入解决了该问题。

Just as in managed code, java.lang.* is imported automatically.


1
投票

我还在数据绑定中遇到这些错误。我试过'android.databinding.enableV2 = true',它无法正常工作。在我为layout.xml重做数据绑定之后,我发现了这些解决方案。如果我在layout.xml中使用'android.view.View',我确实导入了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>" />

并使用像这样的变量视图。

 <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()功能,但无法在layout.xml中导入和使用Integer。所以我将Integer值转换为带有%d标签的strings.xml。

 <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
投票

我假设你使用的是gradle插件版本3.4(不是你提到的4.3)。请参阅可用的gradle-plugin版本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
© www.soinside.com 2019 - 2024. All rights reserved.