2017-05-24 2 views
3

Je suis d'essayer la nouvelle ORM chambre googles Android architecture Composants, je suivais la documentation, mais quand je lance mon code que je reçois java.lang.RuntimeException: cannot find implementation for com.zeyad.usecases.app.UserDatabase. UserDatabase_Impl does not existChambre DataBase pas mis en œuvre

Voici mon code:

projet Gradle:

allprojects { 
repositories { 
    jcenter() 
    maven { url 'https://jitpack.io' } 
    maven { url 'https://maven.google.com' } 
} 
} 

Module Gradle:

compile "android.arch.lifecycle:runtime:1.0.0-alpha1" 
compile "android.arch.lifecycle:extensions:1.0.0-alpha1" 
annotationProcessor "android.arch.lifecycle:compiler:1.0.0-alpha1" 
compile "android.arch.persistence.room:runtime:1.0.0-alpha1" 
annotationProcessor "android.arch.persistence.room:compiler:1.0.0-alpha1" 

utilisateur:

@Entity(tableName = "User") 
public class User { 

    static final String LOGIN = "login"; 
    private static final String ID = "id", AVATAR_URL = "avatar_url"; 
    @PrimaryKey 
    @SerializedName(LOGIN) 
    @ColumnInfo(name = LOGIN) 
    String login; 

    @SerializedName(ID) 
    @ColumnInfo(name = ID) 
    int id; 

    @SerializedName(AVATAR_URL) 
    @ColumnInfo(name = AVATAR_URL) 
    String avatarUrl; 

    public User() { 
    } 

    public User(String login, int id, String avatarUrl) { 
     this.login = login; 
     this.id = id; 
     this.avatarUrl = avatarUrl; 
    } 

    public static boolean isEmpty(User user) { 
     return user == null || (user.login == null && user.avatarUrl == null); 
    } 

    public String getLogin() { 
     return login; 
    } 

    public void setLogin(String login) { 
     this.login = login; 
    } 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public String getAvatarUrl() { 
     return avatarUrl; 
    } 

    public void setAvatarUrl(String avatarUrl) { 
     this.avatarUrl = avatarUrl; 
    } 

    @Override 
    public boolean equals(Object o) { 
     if (this == o) return true; 
     if (o == null || getClass() != o.getClass()) return false; 

     User user = (User) o; 

     return id == user.id && (login != null ? login.equals(user.login) : user.login == null 
       && (avatarUrl != null ? avatarUrl.equals(user.avatarUrl) : user.avatarUrl == null)); 
    } 

    @Override 
    public int hashCode() { 
     int result = login != null ? login.hashCode() : 0; 
     result = 31 * result + id; 
     result = 31 * result + (avatarUrl != null ? avatarUrl.hashCode() : 0); 
     return result; 
    } 
} 

UserDatabase:

@Database(entities = {User.class}, version = 1) 
public abstract class UserDatabase extends RoomDatabase { 
    public abstract RoomBaseDao roomBaseDao(); 
} 

RoomBaseDao:

@Dao 
public interface RoomBaseDao { 

    @Insert(onConflict = OnConflictStrategy.REPLACE) 
    void insertItemsReplace(User... objects); 

    @Update(onConflict = OnConflictStrategy.REPLACE) 
    void updateItemsReplace(User... objects); 

    @Delete 
    void deleteItem(User object); 
} 

application onCreate:

UserDatabase gDb = Room.databaseBuilder(this, UserDatabase.class, "test-db").build(); // throws the exception above 

Merci à l'avance.

+0

Il se sent comme le code est généré comme prévu se. Avez-vous inclus les deux dépendances dans votre fichier 'build.gradle'? – CommonsWare

+0

J'ai mis à jour la question avec les dépendances de gradage –

+0

OK, cela semble bien. Si vous allez dans le répertoire 'build/generated/source /' de votre module, voyez-vous un répertoire 'apt/debug /' avec vos classes 'UserDatabase_Impl.java' et' RoomBaseDao_Impl.java' (dans le paquet Java approprié)? – CommonsWare

Répondre

5

Dans mon cas, j'utilisais l'ancienne version de ButterKnife qui nécessitait android-apt plugin. Donc, j'ai mis à jour ButterKnife (qui utilise maintenant le processeur d'annotation) et la déclaration de plugin supprimé dans Gradle fichier.

Probablement que ce n'était pas exactement votre problème, mais peut-être que cela aidera les autres.

+0

s'avère que j'utilisais encore Android-apt et quand je l'ai enlevé, tout fonctionne bien maintenant. –

+0

Je suis heureux d'aider. – ThirdMartian

0

Une autre chose qui peut provoquer le problème:

configurations.all { 
    resolutionStrategy { 
    force "com.android.support:support-annotations:$SUPPORT_LIBRARY_VERSION" 
    } 
}