상세 컨텐츠

본문 제목

[안드로이드 코틀린] 파이어베이스 사용자 CRUD 만드는 방법 part4 - 사용자 수정

안드로이드

by aries574 2022. 11. 10. 11:03

본문


이번 시간에는 파이어베이스(Firebase) CRUD 만드는 방법 - 네 번째 시간

실시간 데이터베이스(Realtime Database)에 저장된 사용자 정보수정하는 방법을 알아보겠습니다.

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

2022.11.09 - [안드로이드] - [안드로이드 코틀린] 파이어베이스 사용자 CRUD 만드는 방법 part3 - 사용자 리스트

 

[안드로이드 코틀린] 파이어베이스 사용자 CRUD 만드는 방법 part3 - 사용자 리스트

이번 시간에는 파이어베이스(Firebase) CRUD 만드는 방법 - 세 번째 시간 실시간 데이터베이스(Realtime Database)에 저장된 사용자 목록을 가져오는 방법을 알아보겠습니다. 이전 포스팅은 아래 링크를

aries574.tistory.com


목차

1. 실행 화면
2. 데이터베이스 클래스 UserDao.kt
3. 사용자정보 수정 액티비티
4. 사용자 리스트 어댑터 ListAdapter.kt


1. 실행 화면

 


2. 데이터베이스 클래스 UserDao.kt

 - 설명 - 

 1. userUpdate(key: String, hasMap: HashMap<String, Any>)

   데이터베이스에 key(구분 값)와 수정된 hasMap(사용자 정보)를 전달해서 데이터 변경

class UserDao {
    private var databaseReference: DatabaseReference? = null

    init{
        val db = FirebaseDatabase.getInstance()
        databaseReference = db.getReference("user")
    }

    //등록
    fun add(user: User?): Task<Void>{
        return databaseReference!!.push().setValue(user)
    }

    //조회
    fun getUserList(): Query?{
        return databaseReference
    }

    //수정
    fun userUpdate(key: String, hashMap: HashMap<String, Any>): Task<Void>{

        return databaseReference!!.child(key)!!.updateChildren(hashMap)
    }
}

 

반응형

 

3. 사용자정보 수정 액티비티

app 선택 -> 마우스 오른쪽 클릭 -> New -> Activity -> Empty Activity

Activity name: UserUpdateActivity

activity_user_update.xml

 - 설명 - 

 1. 수정할 사용자 이름 EditText

 2. 수정할 사용자 나이 EditText

 3. 사용자정보 수정 기능 Button

<?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:orientation="vertical"
    tools:context=".UserUpdateActivity">

    <EditText
        android:id="@+id/up_name_edit"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="이름"
        android:inputType="text" />

    <EditText
        android:id="@+id/up_age_edit"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="나이"
        android:inputType="number" />

    <Button
        android:id="@+id/update_btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:text="수정"
        android:textSize="25sp" />
</LinearLayout>

 

UserUpdateActivity.kt

 - 설명 - 

 1. intent.hasExtra("key")

   해당 정보에 데이터 null 체크

 2. intent.getStringExtra("key")

   해당 정보 꺼내오기

 3. addOnSuccessListener

   성공 이벤트

 4. addOnFailureListener

   실패 이벤트

class UserUpdateActivity : AppCompatActivity() {

    private lateinit var binding: ActivityUserUpdateBinding

    lateinit var sKey: String
    lateinit var sName: String
    lateinit var sAge: String

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

        //데이터베이스 객체
        val dao = UserDao()

        //데이터 null체크
        if(intent.hasExtra("key") && intent.hasExtra("name")
            && intent.hasExtra("age")){

            //데이터 담기
            sKey = intent.getStringExtra("key")!!
            sName = intent.getStringExtra("name")!!
            sAge = intent.getStringExtra("age")!!

            //데이터 보여주기
            binding.upNameEdit.setText(sName)
            binding.upAgeEdit.setText(sAge)

            //사용자정보 수정버튼 이벤트
            binding.updateBtn.setOnClickListener {

                //입력값
                val uName = binding.upNameEdit.text.toString()
                val uAge = binding.upAgeEdit.text.toString()

                //파라미터 셋팅
                val hasMap: HashMap<String, Any> =  HashMap()
                hasMap["userName"] = uName
                hasMap["userAge"] = uAge

                //사용자 업데이트 이벤트
                dao.userUpdate(sKey, hasMap).addOnSuccessListener {

                    Toast.makeText(applicationContext, "수정 성공",
                        Toast.LENGTH_SHORT).show()

                    //사용자 목록으로 이동
                    val intent = Intent(this@UserUpdateActivity,
                        UserListActivity::class.java)
                    startActivity(intent)
                    finish()

                }.addOnFailureListener {
                    Toast.makeText(applicationContext, "수정 실패: ${it.message}",
                        Toast.LENGTH_SHORT).show()
                }
            }
        }
    }
}

 


4. 사용자 리스트 어댑터 ListAdapter.kt

 - 설명 - 

 1. intent.putExtra("key", user.userKey)

   전달할 데이터 담기(구분 값, 데이터)

 2. context.startActivity(intent)

   해당 액티비티 이동

 3. (context as Activity).finish()

   현재 액티비티 종료

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 = LayoutInflater.from(context)
            .inflate(R.layout.user_layout, parent, false)

        return UserViewHolder(view)
    }

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

        val user: User = userList[position]

        holder.nameText.text = user.userName
        holder.ageText.text = user.userAge

        holder.itemView.setOnClickListener {

            //사용자 수정화면으로 이동
            val intent = Intent(context, UserUpdateActivity::class.java)
            intent.putExtra("key", user.userKey)
            intent.putExtra("name", user.userName)
            intent.putExtra("age", user.userAge)
            context.startActivity(intent)
            (context as Activity).finish()
        }
    }

    //값 갯수 리턴
    override fun getItemCount(): Int {

        return userList.size
    }

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

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

2022.10.18 - [안드로이드] - [안드로이드 코틀린] 채팅앱 만드는 방법 part1 - 로그인 액티비티

 

[안드로이드 코틀린] 채팅앱 만드는 방법 part1 - 로그인 액티비티

이번 시간에는 채팅앱 만들기 첫 번째 시간 로그인 액티비티 만드는 방법을 알아보겠습니다. 목차 1. 실행 화면 2. 뷰 바인딩 3. 백그라운드 drawable 4. 로그인 화면 LogInActivity 5. 홈 화면 변경 1. 실

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.14 - [안드로이드] - [안드로이드 코틀린] SQLite ToDo List 만드는 방법 part1 - Data 클래스와 DB 클래스

 

[안드로이드 코틀린] SQLite ToDo List 만드는 방법 part1 - Data 클래스와 DB 클래스

이번 시간에는 ToDo List 만들기 첫 번째 시간 Data 클래스와 DB 클래스를 만들어 보겠습니다. 목차 1. 라이브러리 등록 2. ToDo 클래스 ToDoModel.kt 3. ToDo DB 클래스 ToDoDB.kt 1. 라이브러리 등록 build.gradle(Mod

aries574.tistory.com

 

반응형

관련글 더보기

댓글 영역