https://ibb.co/gZGL9nc
https://ibb.co/QfgQZFF
링크의 사진처럼 각 부위별로 데이터베이스에서 데이터를 받아와 뿌려주려고하는데요,
로컬이던 서버든 뭐든 일단 뭐라도 사용해보고자해서 로컬 DB를 사용하기로 했고, Room을 이용하고 있습니다.
샘플 코드를 뒤적거리면서 따라하고는 있는데..DB에 데이터를 이제 어떻게 넣어야할지 ViewModel 클래스에서 막혔는데요.
1.엔티티 설계도 부위별로 프로퍼티를 모두 선언해주는게 맞는지..
2.탭에 보이는 데이터가 속성(애트리뷰트) 별로 보여지기 때문에 이것을 속성 별로 저장해야하는데,
어떻게 해야하는지.
3.마찬가지로 속성별로 보여지기때문에 속성별로 데이터를 가져와야하는데 DAO의 쿼리문을 건드리면 되는지..
4. ViewModel 클래스에서 Repository 클래스를 이용해서 데이터를 가져오는것이니까, repository는 미리 어디선가 string 리소스 파일에서 데이터를 가져와야할것같은데.. 그부분이 어디가 되어야할지 모르겠어요..
조언좀 부탁드립니다.
Entity 클래스
@Entity
data class Workout(
@PrimaryKey(autoGenerate = true)
val id: Int,
val chest: String,
val back: String,
val leg: String,
val shoulder: String,
val biceps: String,
val triceps: String,
val abs: String
)
WokroutDatabase
@Database(entities = [Workout::class], version = 1)
abstract class WorkoutDatabase : RoomDatabase() {
abstract fun workoutDao() : WorkoutDao
companion object {
private var INSTANCE: WorkoutDatabase? = null
fun getInstance(context: Context): WorkoutDatabase =
INSTANCE ?: synchronized(this) {
INSTANCE ?: buildDatabase(context).also { INSTANCE = it }
}
private fun buildDatabase(context: Context) =
Room.databaseBuilder(context.applicationContext,
WorkoutDatabase::class.java, "Workout.db")
.build()
}
}
DAO
@Dao // Data Access Object
interface WorkoutDao {
@Query("SELECT * FROM Workout") // Workout 테이블에서 모든 값을 가져옴
abstract fun getAll(): List<Workout>
@Insert
abstract fun insert(workout: Workout)
@Update
abstract fun update(workout: Workout)
@Delete
abstract fun delete(workout: Workout)
}
Repository
class WorkoutRepository(application: Application) {
private val workoutDB: WorkoutDatabase = WorkoutDatabase.getInstance(application)
private val workoutDao: WorkoutDao = workoutDB.workoutDao()
private val workout: List<Workout> = workoutDao.getAll()
fun getAll() : List<Workout> = workout
fun insert(workout: Workout) {
workoutDao.insert(workout)
}
fun delete(workout: Workout) {
workoutDao.delete(workout)
}
}
ViewModel (막힘....)
class WorkoutListViewModel(application: Application) : AndroidViewModel(application){
private var _part :MutableLiveData<String> = MutableLiveData()
private var _list : MutableLiveData<List<String>> = MutableLiveData(arrayListOf())
private val resources = application.resources
private val repo : WorkoutRepository = WorkoutRepository(application)
private val workout = repo.getAll()
private val workoutListSource : WorkoutListSource by lazy { WorkoutListLocalSource(resources) }
val list = _list
val part = _part
fun setList(part : String) {
_part.value = part
// _list.value = workoutListSource.getWorkoutListByPart(BodyType.valueOf(part))
when(_part.value) {
"가슴" -> _list.value = workoutListSource.getWorkoutListByPart(BodyType.CHEST)
"등" -> _list.value = workoutListSource.getWorkoutListByPart(BodyType.BACK)
"하체" -> _list.value = workoutListSource.getWorkoutListByPart(BodyType.LEG)
"어깨" -> _list.value = workoutListSource.getWorkoutListByPart(BodyType.SHOULDER)
"이두" -> _list.value = workoutListSource.getWorkoutListByPart(BodyType.BICEPS)
"삼두" -> _list.value = workoutListSource.getWorkoutListByPart(BodyType.TRICEPS)
"복근" -> _list.value = workoutListSource.getWorkoutListByPart(BodyType.ABS)
}
}
fun getList() : List<String> = list.value!!
}