2017-11-05 12 views
2

に変換することintcannotルームはIllegalArgumentException:</p> <blockquote> <p>Error:Execution failed for task ':app:compileDebugJavaWithJavac'. java.lang.IllegalArgumentException: intcannot be converted to an Element</p> </blockquote> <p>そして、この警告:プロジェクトをコンパイルしようとしたとき、私はこのエラーを抱えている要素

Warning:Supported source version 'RELEASE_7' from annotation processor 'android.arch.persistence.room.RoomProcessor' less than -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を再起動しました(無効化と再起動)。

答えて

1

@Delete パブリック抽象ボイドdeleteNow(int型のID)を削除します。

あなたダオから、それは余分な情報については、

2

@Delete annotation marks a method in a Dao annotated class as a delete method. The implementation of the method will delete its parameters from the database.
All of the parameters of the Delete method must either be classes annotated with Entity or collections/array of it.

読むhereに動作します。

あなたのケースでは、前述のルールに違反するintタイプのパラメータを渡します。だからあなたはそのエラーを受けているのです。

この問題を解決するには、deleteNowメソッドを除外するか、上記のルールに違反しないパラメータを渡すだけです。

関連する問題

 関連する問題