2026/03/26

오늘의 이야기

https://billcorea.tistory.com/381



 


안드로이드 앱 만들기 : Sqlite 로 구현해 보는 Paging (feat Jetpack compose, 대량 데이터 조회)


오늘 적어 두고자 하는 주제는 Paging입니다. 웹 개발을 하는 경우에는 각종 framework 등을 이용해서 데이터 조회 시 UI의 부하를 줄이기 위해서 Paging을 할 수 있도록 지원을 받습니다. xml layout 을 구


billcorea.tistory.com




이전 글에서 말했던 페이지 처리의 오류가 발견되었습니다 ㅋ~  사유는  데이터의 개수가 페이징을 할 수 있는 기본 건수보다 작은 경우 오류가 발생하는 것을 확인하게 되었습니다.


 


조치 

페이지 처리의 클래스를 수정 하였습니다. 


 


class ListViewSource(pContext : Context) : PagingSource<Int, ViewReceiveList>() {

val context = pContext

override fun getRefreshKey(state: PagingState<Int, ViewReceiveList>): Int? {
return state.anchorPosition
}

override suspend fun load(params: LoadParams<Int>): LoadResult<Int, ViewReceiveList> {

return try {
val nextPage = params.key ?: 1
val viewList = dataReadPage(nextPage, params.loadSize)
val loadOver = params.loadSize < viewList.size // 페이지 건수 보다 많은 데이터가 있나 ?
LoadResult.Page(
data = viewList,
prevKey = if (nextPage == 1) null else viewList[0].id.toInt(),
nextKey = if (viewList.isEmpty()) null
else if (!loadOver) null // 데이터 건수가 작은 경우는 다음 페이지는 없기 떄문에
else viewList[viewList.size - 1].id.toInt()
)
} catch (e : IOException) {
return LoadResult.Error(e)
}
}

@SuppressLint("Range")
private fun dataReadPage(nextPage: Int, loadSize: Int): List<ViewReceiveList> {
val returnList = ArrayList<ViewReceiveList>()
val dbHandler = DBHandler.open(context)
Log.e("", "readKey=$nextPage")
val rs = dbHandler.selectRcvList(nextPage, loadSize)
returnList.clear()
while (rs.moveToNext()) {
val viewRevList = ViewReceiveList()
viewRevList.id = rs.getString(rs.getColumnIndex("_id"))
viewRevList.strBody = rs.getString(rs.getColumnIndex("strBody"))
viewRevList.chkValue = rs.getString(rs.getColumnIndex("chkValue"))
viewRevList.regDate= rs.getString(rs.getColumnIndex("regDate"))
viewRevList.eventID = rs.getString(rs.getColumnIndex("eventID"))
viewRevList.inPhoneNumber = rs.getString(rs.getColumnIndex("inPhoneNumber"))
viewRevList.kakaoProfileImage = rs.getString(rs.getColumnIndex("kakao_profile_image"))
returnList.add(viewRevList)
}
dbHandler.close()
return returnList
}
}

이런 것 수정하는 방법으로 데이터 표기가 되고 있는 것을 확인하게 되었습니다.  앱 사용에 불편을 드려 죄송합니다. 


ㅠㅠ;;


 


샘플페이지



 


 


p.s : 2024.03.20 ~~~ 이제 서야 알게된 사실은 ... 이 방법으로는 1페이지이 데이터만 나오고 그 다음은 나오지 않고 있다는 사실을 알게 되었습니다. ㅠㅠ;;  이후 정리가 되면 다시 게시글로 정리를 해 보겠습니다.





댓글 없음:

댓글 쓰기

오늘의 이야기

  수다 떨기 (GEMINI) 개발 이야기   메인화면   이번 이야기는 이전 버전에서 달라지는 수다 떨기(GEMINI) 버전에 대한 이야기입니다.  이전 버전은 koGPT을 활용한 버전이었습니다. 다만, KAKAO API 가 제공하는 koGPT의 기...