我在尝试编译项目时遇到此错误:
错误:任务':app:compileDebugJavaWithJavac'执行失败。 java.lang.IllegalArgumentException:int不能转换为Element
这个警告:
警告:支持的源版本' RELEASE_7'来自注释处理器' android.arch.persistence.room.RoomProcessor'少于-source' 1.8'
这些是我的数据库相关类:
@Entity(tableName = "users")
public class SerializedUser {
@PrimaryKey(autoGenerate = true)
private int id;
@ColumnInfo(name = "first_name")
private String firstName;
@ColumnInfo(name = "last_name")
private String lastName;
@ColumnInfo(name = "username")
private String username;
public SerializedUser(int id, String firstName, String lastName, String username) {
this.id = id;
this.firstName = firstName;
this.lastName = lastName;
this.username = username;
}
public int getId() {
return id;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
public String getUsername() {
return username;
}
}
@android.arch.persistence.room.Database(entities = {SerializedUser.class}, version = 4)
public abstract class Database extends RoomDatabase {
public abstract UserDao userDao();
private static final String DATABASE_NAME = "weather";
// For Singleton instantiation
private static final Object LOCK = new Object();
private static volatile Database i;
public static Database init(Context context) {
if (i == null) {
synchronized (LOCK) {
if (i == null) {
i = Room.databaseBuilder(context.getApplicationContext(),
Database.class, Database.DATABASE_NAME)
.fallbackToDestructiveMigration().build();
}
}
}
return i;
}
public static boolean isInited(){
return i != null;
}
public static Database getInstance(){
if(i == null)
throw new NullPointerException("Database.getInstance called when Database not initialized");
return i;
}
}
@Dao
public abstract class UserDao {
Converters converters;
public void inject(Converters converters) {
this.converters = converters;
}
@Insert(onConflict = REPLACE)
public abstract void saveNow(SerializedUser user);
@Delete
public abstract void deleteNow(int id);
@Query("DELETE FROM users")
public abstract void deleteAllNow();
@Query("SELECT * FROM users")
public abstract List<SerializedUser> getAllNow();
@Query("SELECT * FROM users ORDER BY last_name ASC")
public abstract LivePagedListProvider<Integer, SerializedUser> usersByLastName();
}
所以当它试图实现数据库类时会发生错误?在SerializedUser上的那个id不是问题,我已经评论过了,问题仍然是一样的。试图清理并重建项目并重新启动Android Studio(无效并重新启动)。
答案 0 :(得分:7)
删除
@Delete
public abstract void deleteNow(int id);
从你的Dao开始它会起作用
答案 1 :(得分:5)
@Delete
注释将Dao注释类中的方法标记为 删除方法。该方法的实现将删除它 来自数据库的参数 Delete方法的所有参数必须是使用Entity
注释的类或其集合/数组。
阅读here以获取更多信息。
因此,在您的情况下,您传递的参数int
类型违反了上述规则。这就是你得到那个错误的原因。
要解决此问题,您应该排除deleteNow
方法,或者只传递任何不违反上述规则的参数。
答案 2 :(得分:-1)
错误:任务&#39;:app:compileDebugJavaWithJavac&#39;执行失败。 java.lang.IllegalArgumentException:int不能转换为Element
基本上,这个问题不仅出现在@Delete
查询中,而且出现在所有Room的CRUD注释(@Insert
,@Delete
,@Update
)之外@Query
。
这些CRUD注释方法的所有参数必须是使用Entity或其集合/数组注释的类。
所以我们不能传递原语或其他原语。