@cepprice

Как использовать Dagger 2 с Room, чтобы был только один экземпляр БД и не было тысячи дополнительных классов и интерфейсов?

Entiry
@Entity(tableName = "notes")
public class Note {

    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "id")
    public long id;

    @ColumnInfo(name = "title")
    public String title;

    @ColumnInfo(name = "content")
    public String content;

    @ColumnInfo(name = "date")
    public String date;
}


Dao
@Dao
public interface NoteDao {

    @Query("SELECT * FROM notes ORDER BY date DESC")
    List<Note> getAll();

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    void insert(Note note);

    @Update
    void update(Note note);

    @Delete
    void delete(Note note);
}


База данных
@Database(entities = Note.class, version = 1)
public abstract class AppDatabase extends RoomDatabase {
    public abstract NoteDao noteDao();
}


Все решения, которые я видел, включают в себя создания тысячи классов и интерфейсов, неужели без этого никак?
  • Вопрос задан
  • 1262 просмотра
Решения вопроса 1
@tiroman
Какие тысячи, вы о чем? Один класс модуля, один интерфейс компонента, и строки инициализации компонента там где это надо, ну и если будет необходимость то интерфейс скоупа... вы вообще документацию даггера читали? стандартные примеры смотрели?
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
fursa08
@fursa08
Junior Android developer
private const val databaseName = "knote.db"

@Database(
    entities = [Note::class],
    version = 4,
    exportSchema = false
)
abstract class InnerDb : RoomDatabase() {
    abstract fun createNoteDao(): NoteDao

    companion object {
        fun createInstance(context: Context): InnerDb {
            return Room.databaseBuilder(context, InnerDb::class.java, databaseName)
                .allowMainThreadQueries()
                .fallbackToDestructiveMigration()
                .build()
        }
    }
}
Ответ написан
FirsofMaxim
@FirsofMaxim
android, java, kotlin developer
А зачем вам Room? открывайте соединения напрямую и работайте с курсорами. Как получится можно и Room попробовать. ;)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы