Android의 Client Side Join
12194 단어 AndroidKotlinFirebaseCloudFirestore
상당히 이해하기 쉽다.
https://qiita.com/1amageek/items/afc1c0ceb15ffc2372fd
https://qiita.com/1amageek/items/64bf85ec2cf1613cf507
기본 이념🖋
기본적으로 표시할 일람의 ID만 가지고 화면에 그려질 때만 표시되는 횟수별 상세한 정보를 가지고 있다.
↑ 의 그림에는 "자세한 정보"횟수 (4회) 로 Firestore에 데이터를 찾는 방법을 묻는다.
RDB등에서 이런 설치는 욕을 먹을 수도 있지만 Firestore에서는 이런 생각이 주류다.
실시💻
예를 들어 설명하다.
사용자가 속한 그룹 목록을 읽어들일 때 데이터 구조는 다음과 같이 SubCollection을 사용합니다.
/user/{userId}/group/{groupId}
/group/{groupId}/user/{userId}
({userId} 및 {groupId}는 Firestore에서 자동으로 생성되는 ID입니다.)이 데이터 구조에 사용자가 속한 그룹 목록을 표시합니다.
1. 사용자가 속한 그룹 ID 가져오기
먼저 사용자가 속한 그룹 ID를 가져옵니다.
val db = FirebaseFirestore.getInstance()
db.collection("user").document(userId)
.collection("group")
.get()
.addOnSuccessListener{
// 成功したとき
if (it.isEmpty) return@OnSuccessListener
val groupIdList = ArrayList<String>()
val dataList = it.documents
dataList.forEach {
groupIdList.add(it.id)
}
}
.addOnFailureListener{
// 失敗したとき
}
userId
애플리케이션을 사용하는 사용자의 ID)요약 테이블에 속한 ID
ArrayList<String>
를 저장합니다.이 구현은 검색 순서를 보장하지 않지만, 목록에 표시된 그룹의 순서를 결정하려면 여기서 다시 정렬하거나 사용하십시오
Query
가져온 ID 목록을 Adapter에 전달하여 RecyclerView 셀을 생성합니다.
여기서 얻은 ID는 셀을 생성하는 Adapter에 전달합니다.
class GroupAdapter(private val activity: GroupActivity, private val groupIdList: ArrayList<String>) : RecyclerView.Adapter<GroupAdapter.ViewHolder>() {
private val inflater = LayoutInflater.from(activity)
override fun onCreateViewHolder(viewGroup: ViewGroup, i: Int): ViewHolder {
return ViewHolder(inflater.inflate(R.layout.listview_group_item, viewGroup, false))
}
override fun onBindViewHolder(viewHolder: ViewHolder, i: Int) {
val groupId = groupIdList[i]
activity.showProgress()
val db = FirebaseFirestore.getInstance()
db.collection("group").document(groupId).get().addOnSuccessListener {
if (it.exists()){
// セルの描写タイミングでデータを取得し、画面にアタッチする
val title = it["title"] as String
viewHolder.groupTitle.text = title
if (it["description"] != null){
val description = it["description"] as String
viewHolder.groupDescription.text = description
}
if (it["icon_url"] != null){
val iconUrl = it["icon_url"] as String
Picasso.with(activity).load(iconUrl).transform(CircleTransform()).fit().centerCrop().into(viewHolder.iconView)
}
}
}.addOnFailureListener {
// 失敗したとき
})
}
override fun getItemCount(): Int {
return groupIdList.size
}
class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val groupTitle: TextView = view.groupTitle
val groupDescription: TextView = view.groupDescription
val iconView: ImageView = view.iconView
}
}
이게 완성이야.실제 묘사가 늦지 않습니까?😢
나도 처음에는 이렇게 생각했지만, 실제로 하기는 결코 늦지 않았다.
Firebase 좋아요.
꼭 한번 해보세요.
선전하다🎫
예전에'안드로이드에서 사용하는 Firebase 입문'이라는 제목으로 기사를 썼는데 가능하면 이쪽도
트위터↓
https://twitter.com/yshogo87
Reference
이 문제에 관하여(Android의 Client Side Join), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/superman9387/items/43c526b58175fa6cd35f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)