I am trying out the new Room ORM from googles Android Architecture Components, I followed the documentation but when i run my code i get java.lang.RuntimeException: cannot find implementation for com.zeyad.usecases.app.UserDatabase. UserDatabase_Impl does not exist
Here is my code:
Gradle project:
allprojects {
repositories {
jcenter()
maven { url 'https://jitpack.io' }
maven { url 'https://maven.google.com' }
}
}
Gradle module:
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"
User:
@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
Thanks in advance.
In my case I was using old version of ButterKnife which required android-apt plugin. So I updated ButterKnife (which now uses annotation processor) and removed plugin declaration in Gradle file.
Probably that was not exactly your problem, but maybe it will help others.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With