Room IllegalArgumentException:int不能转换为Element

Sca*_*ass 10 java android android-room

我在尝试编译项目时遇到此错误:

错误:任务':app:compileDebugJavaWithJavac'的执行失败.java.lang.IllegalArgumentException:int不能转换为Element

这个警告:

警告:注释处理器'android.arch.persistence.room.RoomProcessor'支持的源版本'RELEASE_7'小于-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();
}
Run Code Online (Sandbox Code Playgroud)

所以当它试图实现数据库类时会发生错误?在SerializedUser上的那个id不是问题,我已经评论过了,问题仍然是一样的.试图清理并重建项目并重新启动Android Studio(无效并重新启动).

Vik*_*ash 9

去掉

@Delete
public abstract void deleteNow(int id);
Run Code Online (Sandbox Code Playgroud)

从你的刀道上可以

  • 您可以删除不是id的实体,也可以编写查询以按ID删除用户。请参考/sf/ask/3327720021/?rq=1 (3认同)
  • 稍微解释一下会很好,我会尝试这是否解决了我的问题,但我仍然不明白为什么。如果您包括为什么我应该删除它,那就太好了。 (2认同)

01_*_*1__ 6

@Delete注释将Dao注释类中的方法标记为删除方法.该方法的实现将从数据库中删除其参数.Delete方法的
所有参数都必须是带有注释的类Entity或者它的collections/array.

请阅读此处了解更多信息.

因此,在您的情况下,您传递的参数的int类型违反了上述规则.这就是你得到那个错误的原因.

要解决此问题,您应该排除deleteNow方法或只传递任何不违反上述规则的参数.