인프런 커뮤니티 질문&답변

끝까지 간다님의 프로필 이미지
끝까지 간다

작성한 질문수

[중급편] 친절한 JETPACK 개론 <상> (Android Kotlin)

ROOM 간단한 예제 - 6 (구조 수정)

특정 값으로 데이터 불러오기

작성

·

235

0

DB에서

1. 데이터 삽입하기

2. 모든 데이터 불러오기

3. 모든 데이터 삭제하기

위의 것들은 잘 되는데 특정 값으로 값을 불러오는 방법이 안 돼서 질문 남깁니다..

예를 들어  특정 id에 해당하는 text를 가져온다고 하면

 

 

DAO :

@query("SELECT text FROM text_table WHERE id = :id)

fun getText(id : Int) : String

 

 

ViewModel :

fun getText(id : Int) {

 viewmodelscope.launch(Dispatchers.IO){

         repository.getText(id)

     }

}

 

repository :

fun getText(id : Int) : String = textDao().getText(id)

 

이렇게 작성했는데  MainActivity나 Fragment에서 어떻게 text를 가져올 수 있나요..??

 

답변 1

1

개복치개발자님의 프로필 이미지
개복치개발자
지식공유자

안녕하세요

접근은 잘 하신 것 같은데

전체 코드를 공유해주시면 한번 살펴볼게요~

개복치개발자님의 프로필 이미지
개복치개발자
지식공유자

코드와 함께 어떤식으로 구현하고 싶으신지 좀 더 자세히 알려주세요~

 

코루틴에서의 작업은 ui스레드가 아니고 그냥 스레드에서의 작업으로 값을 받아오지 못하고 에러가 나서

해결책을 찾아보니 Handler를 사용 했습니다.

 

 

지금 올리는 1번 방법이나 2번 방법 모두 값이 밀려져 받아옵니다..

 

             

 

db에서 데이터를 읽으면 view상에는 값이 밀리지 않고 바로 저장 되는데 

값을 ui쪽으로 가져오려니 값이 한번씩 밀림현상이 일어납니다

 

db에 불러온 값을 데이터가 안 밀리고 받아올 수 있을까요?

혹시나해서 CoroutineScope.(Dispatchers.Main)도 해봤지만 안 됩니다 ㅠㅠ

개복치개발자님의 프로필 이미지
개복치개발자
지식공유자

안녕하세요

강의 내용을 응용해서 직접 만들고 계시군요

그런데 수강하신 내역을 살펴보니, 순서대로 듣고 있으신 것이 아니라 필요한 부분만 듣고계신 것으로 보입니다.

 

순차적으로 수강을 하시면 db에서 읽어온 데이터를 viewmodel에서 받아서 livedata를 이용하여 ui에 보여주도록 처리해주는 부분이 있는데 viewmodel -> livedata -> retrofit -> room 순서대로 수강 후 개인 프로젝트를 해보시길 권장드릴게요~

 

그리고 지금 하고 계신 프로젝트에 도움이 필요하시면 github에 코드를 올려놓고 링크 보내주시면 살펴보겠습니다~

넵 영상 다 보도록 하겠습니다!!ㅠ

감사합니다. 영상도움이 많이 되고 있습니다

개복치개발자님의 프로필 이미지
개복치개발자
지식공유자

도움이 되신다니 다행입니다~

순서대로 수강하시기를 바라면서 강의를 설계한 것이라 가능하면 순차적으로 수강해주세요~

 

끝까지 파이팅입니다!

끝까지 간다님의 프로필 이미지
끝까지 간다

작성한 질문수

질문하기