Soy nuevo en la biblioteca de habitaciones y quiero hacer un proyecto simple.

Aquí está la clase de entidad.

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

    @PrimaryKey
    private Integer id;
    private String name;

    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

Aquí está la clase de dao.

@Dao
public interface UserDao extends Dao {

    @Query("SELECT * FROM user")
    List<User> getAll();

    @Insert
    void insert(User users);

}

Aquí está la clase AppDatabase.

@Database(entities = {User.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {

    private static AppDatabase INSTANCE;

    public abstract UserDao userDao();

    public static AppDatabase getAppDatabase(Context context) {
        if (INSTANCE == null) {
            INSTANCE =
                    Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, "database-test")
                            .allowMainThreadQueries()
                            .build();
        }
        return INSTANCE;
    }

    public static void destroyInstance() {
        INSTANCE = null;
    }
}

Y aquí está mi actividad principal.

User user = new User();
        user.setName("Test");
        user.setId(2);


        AppDatabase.getAppDatabase(this).userDao().insert(user);
        AppDatabase.getAppDatabase(this).userDao().getAll();

Pero cuando ejecuto este código anterior. Recibo un error a continuación.

Error: (14, 8) error: el método abstracto en DAO debe estar anotado con la interfaz android.arch.persistence.room.Query Y la interfaz android.arch.persistence.room.Insert

Lo busco pero no encuentro nada. Gracias por cualquier sugerencia.

2
6155031 13 nov. 2017 a las 09:42

2 respuestas

La mejor respuesta

Su interfaz DAO no debería extender la interfaz Dao.

@Dao
public interface UserDao {

    @Query("SELECT * FROM user")
    List<User> getAll();

    @Insert
    void insert(User users);

}
4
ElectroWeak 13 nov. 2017 a las 07:15

Para mi necesidad, he usado una clase abstracta como esta:

public interface IMainDao {
String getId();
}


@Dao
public abstract class UserDao extends IMainDao {

@Query("SELECT * FROM user")
List<User> getAll();

//from IUserDao
@Override
public String getId() {
    return "";
  }
}
-2
issamux 6 dic. 2017 a las 09:15