상세 컨텐츠

본문 제목

[안드로이드 코틀린] 채팅앱 만드는 방법 part5 - Firebase 사용자 리스트

안드로이드

by aries574 2022. 10. 24. 20:09

본문


이번 시간에는 채팅앱 만들기 다섯 번째 시간

로그인을 하면 등록한 사용자 리스트를 보여주는 방법을 알아보겠습니다.

이전 포스팅은 아래 링크를 들어가시면 됩니다.

2022.10.21 - [안드로이드] - [안드로이드 코틀린] 채팅앱 만드는 방법 part4 - Firebase 로그인 기능과 사용자 저장 기능

 

[안드로이드 코틀린] 채팅앱 만드는 방법 part4 - Firebase 로그인 기능과 사용자 저장 기능

이번 시간에는 채팅앱 만들기 네 번째 시간 등록한 이메일로 로그인하는 기능과 회원가입 사용자 정보를 DB에 저장하는 기능을 구현하겠습니다. 이전 포스팅은 아래 링크를 들어가시면 됩니다.

aries574.tistory.com


목차

1. 실행 화면
2. 사용자 리스트 화면 user_layout.xml
3. 사용자 리스트 어댑터 UserAdapter.kt
4. 메인 화면 activity_main.xml
5. 메인 코드 MainActivity.kt


1. 실행 화면

 


2. 사용자 리스트 화면 user_layout.xml

- 설명 -

 1. 사용자 이름을 보여주는 TextView

 2. 사용자를 구분해주는 선 View

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:id="@+id/name_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="10dp"
        android:layout_marginTop="5dp"
        android:textSize="30sp"
        android:textStyle="bold"/>

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:layout_below="@id/name_text"
        android:layout_marginTop="5dp"
        android:background="@android:color/black"/>
</RelativeLayout>

 


3. 사용자 리스트 어댑터 UserAdapter.kt

- 설명 -

 1. class UserAdapter(val context: Context, val userList: ArrayList<User>)

   생성 시에 Context와 ArrayList를 넘겨받는다. 

 2. onCreateViewHolder

   화면 연결하는 기능

 3. onBindViewHolder

   데이터 연결 기능

 4. getItemCount

   데이터 개수 돌려주는 기능

class UserAdapter(private val context: Context, private val userList: ArrayList<User>):
 RecyclerView.Adapter<UserAdapter.UserViewHolder>(){

    /**
     * 화면 설정
     */
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): UserViewHolder {
       val view: View = LayoutInflater.from(context).
       inflate(R.layout.user_layout, parent, false)

        return UserViewHolder(view)
    }

    /**
     * 데이터 설정
     */
    override fun onBindViewHolder(holder: UserViewHolder, position: Int) {

        val currentUser = userList[position]
        holder.nameText.text = currentUser.name
    }

    /**
     * 데이터 갯수 가져오기
     */
    override fun getItemCount(): Int {
        return userList.size
    }

    class UserViewHolder(itemView: View): RecyclerView.ViewHolder(itemView){

        val nameText: TextView = itemView.findViewById(R.id.name_text)
    }
}

 

반응형

 

4. 메인 화면 activity_main.xml

- 설명 -

 1. 사용자 리스트 보여주는 RecyclerView

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/user_recycelrView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:listitem="@layout/user_layout" />
</LinearLayout>


5. 메인 코드 MainActivity.kt

- 설명 -

 1. mAuth = Firebase.auth

   인증 서비스 객체 초기화

 2. mDbRef = Firebase.database.reference

   실시간 데이터베이스 객체 초기화

 3. addValueEventListener

   해당 경로 데이터 가져오기

 4. onDataChange

   데이터 변경 시에 실행

 5. onCancelled

   오류 발생 시에 실행

class MainActivity : AppCompatActivity() {

    lateinit var binding: ActivityMainBinding
    lateinit var adapter: UserAdapter

    private lateinit var mAuth: FirebaseAuth
    private lateinit var mDbRef: DatabaseReference

    private lateinit var userList: ArrayList<User>

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        //인증 초기화
        mAuth = Firebase.auth

        //db 초기화
        mDbRef = Firebase.database.reference

        //리스트 초기화
        userList = ArrayList()

        adapter = UserAdapter(this, userList)

        binding.userRecycelrView.layoutManager = LinearLayoutManager(this)
        binding.userRecycelrView.adapter = adapter

        //사용자 정보 가져오기
        mDbRef.child("user").addValueEventListener(object:ValueEventListener{
            override fun onDataChange(snapshot: DataSnapshot) {
                for(postSnapshot in snapshot.children){
                    //유저 정보
                    val currentUser = postSnapshot.getValue(User::class.java)

                    if(mAuth.currentUser?.uid != currentUser?.uId){
                        userList.add(currentUser!!)
                    }
                }
                adapter.notifyDataSetChanged()
            }

            override fun onCancelled(error: DatabaseError) {
                //실패 시 실행
            }
        })

    }//onCreate
}

2022.10.14 - [안드로이드] - [안드로이드 코틀린] 텍스트뷰 TextView 동적으로 생성하는 방법

 

[안드로이드 코틀린] 텍스트뷰 TextView 동적으로 생성하는 방법

이번 시간에는 레이아웃에 텍스트뷰를 동적으로 생성하는 방법을 알아보겠습니다. 목차 1. 실행 화면 2. 뷰 바인딩 3. 메인 화면 activity_main.xml 4. 메인 코드 MainActivity.kt 1. 실행 화면 2. ..

aries574.tistory.com

2022.10.06 - [안드로이드] - [안드로이드 코틀린] tic-tac-toe 보드게임 만드는 방법 part1 - 뷰 바인딩 및 화면 구성

 

[안드로이드 코틀린] tic-tac-toe 보드게임 만드는 방법 part1 - 뷰 바인딩 및 화면구성

이번 시간에는 Tic Tac Toe 보드 게임의 화면 구성을 해보겠습니다. Tic Tac Toe 게임은 오목처럼 번갈아 가며 클릭을 해서 누가 먼저 한 줄을 만들면 이기는 단순한 게임입니다. 목차 1. 실행 화면 2.

aries574.tistory.com

2022.09.28 - [안드로이드] - [안드로이드 코틀린] HTTP 통신 Retrofit2 사용법 part1 - 권한 및 설정

 

[안드로이드 코틀린] HTTP 통신 Retrofit2 사용법 part1 - 권한 및 설정

Retrofit2 라이브러리를 이용해서 HTTP 통신을 하는 방법을 알아보겠습니다. 이번 시간에는 권한 및 설정을 하겠습니다. 목차 1. 권한 등록 2. 라이브러리 등록 3. 모델 클래스 4. 서비스 인터페

aries574.tistory.com

 

반응형

관련글 더보기

댓글 영역