Android의 Client Side Join

Client Side Join은 무엇입니까?이런 사람은 아래의 보도를 보십시오.
상당히 이해하기 쉽다.
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)
요약 테이블에 속한 IDArrayList<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

좋은 웹페이지 즐겨찾기