2015-06-11 24 views
22

Tôi muốn sử dụng Android Data Binding và đã định cấu hình theo tài liệu chính thức.không thể tìm thấy biểu tượng BR trong ràng buộc dữ liệu Android

thông báo lỗi là: lỗi: không thể tìm thấy nhập biểu tượng net.juude.droidviews.BR;

đầu tập tin mức build.gradle là:

buildscript { 
    repositories { 
     jcenter() 
    } 
    dependencies { 
     classpath "com.android.tools.build:gradle:1.3.0-beta2" 
     classpath 'me.tatarka:gradle-retrolambda:3.0.1' 
     classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4' 
     classpath "com.android.databinding:dataBinder:1.0-rc0" 
    } 
} 
allprojects { 
    repositories { 
     jcenter() 
     mavenCentral() 
    } 
} 

và file build.gradle trong mô-đun ứng dụng là

apply plugin: 'com.android.application' 
apply plugin: 'me.tatarka.retrolambda' 
apply plugin: 'com.neenbedankt.android-apt' 
apply plugin: 'com.android.databinding' 


android { 
    compileSdkVersion 22 
    buildToolsVersion "22.0.1" 

    lintOptions { 
     abortOnError false 
    } 

    defaultConfig { 
     applicationId "net.juude.droidviews" 
     minSdkVersion 15 
     targetSdkVersion 22 
    } 
    compileOptions { 
     sourceCompatibility JavaVersion.VERSION_1_8 
     targetCompatibility JavaVersion.VERSION_1_8 
    } 

    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' 
     } 
    } 
    retrolambda { 
     println("JAVA_HOME: " + System.getenv("JAVA_HOME")) 
     println("JAVA7_HOME: " + System.getenv("JAVA7_HOME")) 
     println("JAVA8_HOME: " + System.getenv("JAVA8_HOME")) 
     javaVersion JavaVersion.VERSION_1_7 
    } 
} 

dependencies { 
    compile project(':ptr-lib-debug') 
    compile project(':library') 
    compile 'com.android.support:support-v4:22.1.0' 
    compile 'com.mcxiaoke.volley:library:1.0.+' 
    compile files('libs/droidmocks.jar') 
    compile 'com.android.support:support-annotations:22.1.1' 
    compile 'com.facebook.fresco:fresco:0.5.0' 
    compile 'com.android.support:recyclerview-v7:22.1.1' 
    compile 'io.reactivex:rxandroid:0.24.0' 
    compile 'io.reactivex:rxjava:1.0.6' 
    compile 'com.google.dagger:dagger:2.0' 
    apt 'com.google.dagger:dagger-compiler:2.0' 
} 

file layout là

<layout xmlns:android="http://schemas.android.com/apk/res/android"> 
    <data> 
     <variable name="user" type=" net.juude.droidviews.databinding.User" /> 
    </data> 
    <LinearLayout 
     android:orientation="vertical" android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <TextView 
      android:id="@+id/user_name" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@{user.mName}"/> 

     <TextView 
      android:id="@+id/user_sex" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@{user.sex}"/> 

    </LinearLayout> 
</layout> 

đoạn là

package net.juude.droidviews.databinding; 

import android.databinding.DataBindingUtil; 
import android.databinding.ViewDataBinding; 
import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

import net.juude.droidviews.BR; 
import net.juude.droidviews.R; 

/** 
* Created by juude on 15-6-9. 
*/ 
public class DataBindingFragment extends Fragment{ 
    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     ViewDataBinding dataBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_data_binding, container, false); 
     //dataBinding.setVariable(BR.) 
     User user = new User(); 
     user.setSex("男"); 
     user.setName("Juude"); 
     dataBinding.setVariable(BR.user, user); 
     return dataBinding.getRoot(); 
    } 
} 

vì tôi không nhận được lỗi cú pháp trong Android Studio , Tôi có thể giả định rằng Android Studio có thể nhận ra lớp BR;

Nhưng khi tôi biên dịch dự án, Nó cho tôi biết rằng error:cannot find symbol class BR.

vì vậy tôi muốn biết mình nên làm gì để tạo tệp BR.java phù hợp?

+0

Vui lòng đăng SSCCE: http://www.sscce.org/ – d33tah

+0

@ d33tah Soryy, tôi đã sửa đổi câu hỏi, có thể điều này sẽ là ok – Juude

+0

Bạn ít nhất có thể thấy lỗi thực tế trong View-> Tool Windows- > Gradle Console. Có thể sẽ có một ngoại lệ mà bạn có thể google. – Timmmm

Trả lời

18

Đó là sự cố gây ra bởi plugin android-apt. Nó bỏ qua sự phụ thuộc được cung cấp mà plugin ràng buộc dữ liệu bổ sung.

https://bitbucket.org/hvisser/android-apt/issue/38/android-apt-breaks-brand-new-data-binding#comment-18504545

Bạn có thể làm việc xung quanh nó bằng cách thêm: apt 'com.android.databinding:compiler:1.0-rc0 đến file gradle của bạn.

+0

cảm ơn, Nó hoạt động hoàn hảo – Juude

+2

Điều này đã được sửa trong 'android-apt' là 1.6 – botteaap

+0

Tôi vẫn gặp lỗi:' Lỗi: Không thể tìm thấy com.android.databinding: compiler: 1.0-rc1.' –

2

Tôi cũng gặp sự cố này. Vấn đề là tôi đã thay đổi tên lớp và không cập nhật các giá trị trong tệp XML. Điều này bao gồm các tên biến và nơi chúng được truy cập trong tệp xml.

+2

đó không phải là cùng một vấn đề – Juude

+1

@Juude, đó là lỗi tương tự mặc dù. Tôi tình cờ gặp bài đăng này cố gắng tìm ra những gì tôi đã làm sai. – Nick

3

Chú thích có thể ràng buộc tạo ra một mục nhập trong tệp lớp BR trong quá trình biên dịch. Tệp lớp BR sẽ được tạo trong gói mô-đun.

@Bindable 
    public String getFirstName() { 
     return this.firstName; 
    } 
22

Trong trường hợp ai đó vẫn gặp sự cố này. Tôi đã giải quyết vấn đề này bằng cách vô hiệu hóa bộ nhớ cache trong Android Studio. Và tôi đang sử dụng Android Studio 2 với API 23

File > Invalidate Caches/Restart

+7

Nó vẫn xảy ra với tôi sau khi phát hành một invalidate và sau đó khởi động lại. –

5

tôi tìm ra nguyên nhân của vấn đề trong trường hợp của tôi. Tôi tìm thấy trong báo cáo nhập của lớp Đối tượng dữ liệu của tôi chứa:

import static android.databinding.tool.util.GenerationalClassUtil.ExtensionFilter.BR; 

Sự cố được giải quyết sau khi tôi xóa điều đó. Android Studio bằng cách nào đó đã giải quyết nhầm lớp BR cho tôi.

1

Tôi cũng nhận được thông báo lỗi tương tự, nhưng nguyên nhân gốc rễ của tôi khác với những gì đã được chia sẻ ở đây.

Trong trường hợp của tôi, vấn đề là sau khi tôi giải quyết xung đột hợp nhất, tôi đã nhầm lẫn để lại chú thích thêm @Override trên phương thức. Do đó, bộ tiền xử lý JVM thất bại và sau đó các lớp ràng buộc dữ liệu không được tạo ra.

Phần khó chịu đối với tôi là tôi đã không thể nhìn thấy bất kỳ thông báo lỗi liên quan đến điều này, hoặc thật khó để phát hiện trong số tất cả các lỗi biên dịch khác. Và Android Studio cũng không hiển thị thêm chú thích dưới dạng lỗi. Vì vậy, trong trường hợp người khác đang đối mặt với lỗi tương tự, kiểm tra điều kiện bạn không nơi ẩn náu một lỗi trong một số chú thích có thể ngăn chặn các preprocessor APT từ đá trong

-1

Thêm việc nhập khẩu sau để lớp Object của bạn:.

import com.android.databinding.library.baseAdapters.BR; 
0

Chỉ cần khởi động lại Android Studio, mà không làm mất hiệu lực bộ nhớ cache, đã làm cho các trick (tôi đang sử dụng phiên bản 2.2.3).

0

nếu bạn sử dụng Android Studio2.3 phát hành và cấu hình dự án của bạn là như sau:

Gradle version: 3.3 
Android plubin version:2.3.0 
Compile sdk Version:23+ 
build tools Version:25+ 

bạn chỉ cần làm là thêm

dataBinding{enabled=true} 

để build.gradle, hơn đồng bộ tập tin gradle

0

Đối với trường hợp của tôi, sự cố được gây ra bởi

"lỗi: biến MyVariable là một lready định nghĩa trong lớp MyModel"

Điều khó chịu là Android Studio gradle xây dựng không hiển thị lỗi này ở phía dưới. Tôi đã phải bình luận mỗi lỗi databinding> Xây dựng lại dự án cho đến khi tôi đạt được lỗi. Bài học kinh nghiệm là quét qua từng lỗi từ dưới lên trên và nhận thấy bất cứ điều gì bạn có thể đã thay đổi gần đây.

Các vấn đề liên quan