2015-11-25 26 views
5

Mam problem ze skompilowaniem mojego projektu po dodaniu Realm.io jako zależności przez gradle. Nie można znaleźć wygenerowanych plików utworzonych przez sztylet i wiązanie danych. Jeśli usunę plik realm.io, aplikacja będzie poprawnie kompilować.Realm.io/Dagger/Databinding w tym samym projekcie

Oto moja build.gradle

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

android { 
compileSdkVersion 23 
buildToolsVersion "23.0.2" 

defaultConfig { 
    multiDexEnabled true 
    applicationId "com.foo" 
    minSdkVersion 15 
    targetSdkVersion 23 
    versionCode 1 
    versionName "1.0" 
} 
buildTypes { 
    release { 
     minifyEnabled false 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
    } 
} 
} 

dependencies { 
compile fileTree(dir: 'libs', include: ['*.jar']) 
compile 'com.android.support:appcompat-v7:23.1.0' 
compile 'com.facebook.stetho:stetho:1.2.0' 
compile 'com.facebook.stetho:stetho-okhttp:1.2.0' 
compile 'io.reactivex:rxandroid:0.24.0' 
compile 'io.reactivex:rxjava:1.0.14' 
compile 'com.squareup.okhttp:okhttp:2.4.0' 
compile 'com.squareup.okhttp:okhttp-urlconnection:2.4.0' 
compile 'com.squareup.retrofit:retrofit:1.9.0' 
compile 'com.squareup.okio:okio:1.4.0' 
compile 'com.google.code.gson:gson:2.3' 
compile 'com.jakewharton:butterknife:6.1.0' 
compile 'com.android.support:recyclerview-v7:23.1.0' 
compile 'com.squareup.picasso:picasso:2.3.2' 
compile 'com.android.support:cardview-v7:23.1.0' 
compile 'com.android.support:multidex:1.0.1' 
compile 'com.android.support:design:23.1.0' 
compile 'com.jakewharton.timber:timber:4.1.0' 
compile 'io.realm:realm-android:0.85.1' 

compile 'com.google.dagger:dagger:2.0.1' 
provided 'javax.annotation:jsr250-api:1.0' 
apt "com.google.dagger:dagger-compiler:2.0.1" 
apt 'com.android.databinding:compiler:1.0-rc4' 
} 

Error

widzę, że Królestwo jest również generowanie plików i może kompilatory nie grają ładny razem. Wszelkie pomysły, jak to działa?

Dzięki

+1

Tak procesor adnotacji Realm jest tworzenie klas proxy, które są także skompilowane podczas kompilacji. Na zrzucie ekranu wygląda na to, że błędy są powiązane z innymi klasami niż w Dziedzinie. Czy twoja aplikacja jest tworzona, jeśli usuniesz Realm? – geisshirt

+0

Tak, usuwam dziedzinę, w której aplikacja działa dobrze – Darussian

+0

hej, czy to rozwiąże – Ajinkya

Odpowiedz

1

Realm, Dagger2 i Databinding wszyscy pracujemy w moim projekcie.

Różnica jest:

Używam android 1.5.0 Gradle wtyczki i umożliwienie wiązania z danymi o następującej konfiguracji.

android { 
    ... 
    dataBinding { 
     enabled = true 
    } 
    ... 
} 

I nie mam

apt 'com.android.databinding:compiler:1.0-rc4' 

w zależności.

Cały projekt roboczy jest tutaj: https://github.com/zaki50/realm_template

+0

Po aktualizacji wtyczki gradle android do wersji 2.0.0 i dziedziny do 0.88.3, ​​czy możesz zbudować sukces? – codezjx

2

Widzę, że również otrzymał błąd:

No setter found for field goalInfo

upewnić się, że nazwy pól są takie same jak pobierające i ustawiające. Nie dodawaj "m" do nazw pól. Przykład:

@RealmClass 
public Goal extends RealmObject { 
    //private String mGoalInfo; 
    private String goalInfo; 

    public String getGoalInfo() { 
     return goalInfo; 
    } 

    public void setGoalInfo(String goalInfo) { 
     this.goalInfo = goalInfo; 
    } 
} 
0

to jest możliwe do wykonania interfejsu RealmModel oraz Dodawanie @RealmClass adnotacji do klasy zamiast rozciągającą RealmObject. To pozwala rozszerzyć BaseObservable, ale nadal nie działa.

pojawi się błąd DataBinding: Pakiet mypackage.databinding nie istnieje

Zobacz ten problem na github: https://github.com/realm/realm-java/issues/2716

2

Databinding works with RealmObjects, ale trzeba zaimplementować widoczne.

public class Post extends RealmObject implements Observable { 
    @PrimaryKey 
    private long id; 

    private String text; 

    @Ignore 
    private transient PropertyChangeRegistry mCallbacks; 

    @Bindable 
    public long getId() { 
     return id; 
    } 

    public void setId(long id) { 
     this.id = id; 
     if(!isValid()) { // !isManaged() in Realm 2.0 
      notifyPropertyChanged(BR.id); 
     } 
    } 

    @Bindable 
    public String getText() { 
     return text; 
    } 

    public void setText(String text) { 
     this.text = text; 
     if(!isValid()) { // !isManaged() in Realm 2.0 
      notifyPropertyChanged(BR.text); 
     } 
    } 

    @Override 
    public synchronized void addOnPropertyChangedCallback(OnPropertyChangedCallback callback) { 
     if (mCallbacks == null) { 
      mCallbacks = new PropertyChangeRegistry(); 
     } 
     mCallbacks.add(callback); 
    } 

    @Override 
    public synchronized void removeOnPropertyChangedCallback(OnPropertyChangedCallback callback) { 
     if (mCallbacks != null) { 
      mCallbacks.remove(callback); 
     } 
    } 

    /** 
    * Notifies listeners that all properties of this instance have changed. 
    */ 
    public synchronized void notifyChange() { 
     if (mCallbacks != null) { 
      mCallbacks.notifyCallbacks(this, 0, null); 
     } 
    } 

    /** 
    * Notifies listeners that a specific property has changed. The getter for the property 
    * that changes should be marked with {@link Bindable} to generate a field in 
    * <code>BR</code> to be used as <code>fieldId</code>. 
    * 
    * @param fieldId The generated BR id for the Bindable field. 
    */ 
    public void notifyPropertyChanged(int fieldId) { 
     if (mCallbacks != null) { 
      mCallbacks.notifyCallbacks(this, fieldId, null); 
     } 
    } 
} 

And Dagger + Databinding może przełamać siebie, dla których trzeba dodać

apt 'com.google.guava:guava:19.0' // dagger + databind workaround 
+1

Nie działa. To pokazuje ten sam błąd Pakiet nie istnieje –

+0

@LuvnishMonga to prawdopodobnie oznacza, że ​​masz jakiś błąd w kodzie gdzieś – EpicPandaForce

+0

Kod działa dobrze.Używam tylko Databinding i Realm. Kiedy moja klasa modelu rozciąga się na RealmObject, to pokazuje ten sam błąd, który dotyczy problemu @Darussian. Kiedy zaimplementowałem twój kod, to pokazuje mi ten sam błąd. –

Powiązane problemy