홈>
Android 개발자의 페이징 라이브러리 개요 를 따르고 있습니다.
DataSource.Factory
를 사용하는
다음 방법으로 데이터베이스에서 데이터를 가져옵니다.
@Dao
interface ConcertDao {
// The Int type parameter tells Room to use a PositionalDataSource
// object, with position-based loading under the hood.
@Query("SELECT * FROM Concerts ORDER BY date DESC")
fun concertsByDate(): DataSource.Factory<Int, Concert>
}
그러나 내 경우에는 테이블 Concert가 없지만 다른 방법으로 값을 저장하는 ConcertAA 테이블이 있습니다.
예를 들어, 내
Concert
수업은 :
data class Concert(val date: Long, val bands: List<Band>)
ConcertAA
활성 Android 수업은 다음과 같습니다.
@Table(name = "Concerts")
class ConcertAA(): Model(){
@Column(name = "Bands")
var bands: String? = null
@Column(name = "Date", index = true)
var date: Long? = null
}
밴드를 Json String으로 저장하는 곳
따라서 나의 질문은 어떻게 내가
ConcertDao
를 갖는가이다
쿼리 시점에 내 데이터베이스에 대해 각
ConcertAA
를 변환합니다.
Concert
에 개체
리스트에서 사용될 객체? 쿼리
SELECT * FROM Concerts ORDER BY date DESC
이후
ConcertAA
목록을 반환합니다
Concert
의 목록이 아닙니다
.
- 답변 # 1
관련 자료
- python - SQLite에 대한 peewee의 Order_By 사용자 지정 날짜
- qt - C ++ 및 Lua가 런타임에 사용자 지정 Lua 라이브러리 등록
- android - AndroidX 환경 설정 라이브러리에서 사용자 정의 SharedPreferences 이름을 사용하는 방법은 무엇입니까?
- wpf - 사용자 지정 제어 라이브러리에서 리소스 사전을 사용하는 방법은 무엇입니까?
- Android 사용자 정의 라이브러리 모듈 BindingAdapter 속성이 인식되지 않음
- jgraph - mxGraph의 Drawio에서 사용자 정의 라이브러리의 모양 가져 오기
- blockchain - oo7 Substrate 라이브러리로 커스텀 타입을 어떻게 정의합니까?
- python - 로봇 프레임 워크 - 사용자 정의 라이브러리로 열린 브라우저는 selenium2library에서 인식 할 수 없습니다
- android - 다른 라이브러리에서 사용자 정의보기에 앤티 앨리어싱을 설정하는 방법은 무엇입니까?
- 각도 사용자 정의 라이브러리 ngFor 및 ngIF 오류
- android - 페이징 라이브러리 필터/검색 페이지 목록
- iOS 차트 라이브러리를 사용하여 촛대 차트에서 사용자 지정 한계선 레이블을 만드는 방법은 무엇입니까?
- javascript - 요청 및 응답에 대한 액세스 권한이있는 nestjs에서 써드 파티 라이브러리에 대한 사용자 정의 제공자를 작성하는 방법
- ViewModel이없는 Java의 Android Paging Library가 가능합니까?
트렌드
- OpenCv의 폴더에서 여러 이미지 읽기 (python)
- 파이썬 셀레늄 모든 "href"속성 가져 오기
- html - 자바 스크립트 - 클릭 후 변경 버튼 텍스트 변경
- git commit - 자식 - 로컬 커밋 된 파일에 대한 변경을 취소하는 방법
- JSP에 대한 클래스를 컴파일 할 수 없습니다
- javascript - 현재 URL에서 특정 div 만 새로 고침/새로 고침
- jquery - JavaScript로 현재 세션 값을 얻으시겠습니까?
- javascript - swiperjs에서 정지, 재생 버튼 추가
- JavaScript 변수를 HTML div에 '출력'하는 방법
- python - 문자열에서 특정 문자 제거
다음은 내 자신의 질문에 대답 할지라도 데이터가 변경 될 수있는 데이터베이스 네트워크 논리에 대해서는이 솔루션으로는 이미 데이터베이스에 저장된 데이터의 업데이트를 처리하지 못하기 때문에 충분하지 않습니다.
추상 클래스의 양을 용서하십시오-나는 보통 확장과 재사용 성을 위해 일합니다. 또한 Java와 Kotlin 코드의 혼합을 용서하십시오. 어떤 이유로 일부 라이브러리는 Kotlin을 사용하는 프로젝트에서 인식되지 않지만 그러한 경우 Kotlin을 자유롭게 사용하십시오.
기본적으로 우리는 새로운
구현 된DataSource
를 만들어야했습니다 수업Concert
데이터 클래스 :그런 다음 우리는
DataSourceFactory
가 필요합니다 데이터 소스 인스턴스를 생성합니다 :ConcertDataSource에 대해 구현 된 DataSourceFactory :
그런 다음
ViewModel
PagedList
를 위해 데이터 소스가 있습니다 :우리는
BoundaryCallback
를 사용한다 PagedList가 목록의 어느 한쪽에 도달 할 때마다 더로드해야하고 데이터베이스 데이터에 추가 데이터가 저장되어 있지 않을 때마다 들어야합니다. 그러면 서버 (또는 모든 데이터 공급자)에서 더 많은 데이터를 가져올 수 있습니다. 가져 오기는 맞춤 콜백을 사용하여 호출됩니다.이제
ViewModel
에 콜백을 전달해야하므로 우리는ViewModelProviders
에 알려야합니다ViewModel
의 새 인스턴스를 만드는 방법 매개 변수와 함께. 이것은ViewModelProvider.Factory
를 사용하여 수행됩니다. :구현 된
ViewModelFactory
콘서트 :마침내, 우리는
ViewModel
를 초기화합니다 우리의 관점에서 (Activity
Fragment
등) :이것은 내 질문에 대한 답이 될 것이지만 (적어도 지금은) 안드로이드 용 페이징 라이브러리는 가변 데이터를 처리하지 않습니다. 예를 들어, 콘서트에 변경할 수있는 밴드 목록이있는 경우 (예 : 밴드 중 하나가 콘서트에이를 수없는 경우) 로직은 데이터베이스에 저장된 데이터를 업데이트 할 때 서버에 추가 데이터를 요청하기 때문에 데이터베이스에 저장된 데이터를 업데이트 할 수 없습니다 데이터베이스에 저장된 데이터의 경계 (상단 또는 하단) 중 하나에 도달합니다. 따라서 내 목적으로이 라이브러리는 쓸모가 없습니다.