# PRJ_3. 커뮤니티 게시판 앱_(12) 회원가입 기본 기능-유효성 검사 구현

728x90

🟦 47강. 회원 가입 기본 기능 구현

▶️ 회원 가입 기본 기능

  • 회원 가입 화면에서 아이디/비번/닉네임에 대한 유효성 검사 코드를 작성해준다.
  • 우선, 입력하지 않았을 경우의 유효성 검사를 먼저 처리한다.

🟧 1) MainActivity.kt

  • 사용자 입력값 id/pw 를 담을 변수를 미리 선언해둔다.
//사용자 정보 담을 변수 선언 - 여기에 데이터 담을 예정
var userId = ""
var userPw = ""
var userNickName = ""

🟧 2) JoinFragment.kt

  • 우선 무입력 상태에서 ‘유효성 검사’ 를 실시해야 한다.
  • JoinFragment 뷰에서 사용자가 입력한 값들을 toString() 형태로 받아두고,
  • 사용자가 ID/PW 입력 없이 ‘회원가입’ 버튼 클릭할 경우,
  • 유효성 검사를 거친 뒤 → DIalog 알림을 띄우고 해당 입력란에 Focus()를 마치도록 이벤트 처리를 해둔다.
package com.example.app3_communityapp

import android.content.DialogInterface
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.app.AlertDialog
import com.example.app3_communityapp.databinding.FragmentJoinBinding

class JoinFragment : Fragment() { //'회원가입' 프래그먼트
    //바인딩 설정
    lateinit var joinFragmentBinding : FragmentJoinBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        //바인딩 연결
        joinFragmentBinding = FragmentJoinBinding.inflate(inflater)
        //프래그먼트 상단 '툴바' title 지정
        joinFragmentBinding.joinToolbar.title= "회원가입"

        // 회원가입 화면에서 '다음' 버튼 클릭 시 -> 닉네임 설정 화면으로 전환 이벤트 처리
        joinFragmentBinding.joinNextBtn.setOnClickListener{
//xml 영역에서 사용자 입력값 ('id/pw') string 형태로 가져옴
            val joinId = joinFragmentBinding.joinId.text.toString()
            val joinPw = joinFragmentBinding.joinPw.text.toString()

            // -> 무입력 상태에 대한 유효성 검사
            //ID 입력값에 대하여
            //가져온 사용자 입력값이 null 이거나 무입력 상태인 경우, -> (알림) 다이얼로그 띄움
           if(joinId == null || joinId.length == 0) {
                val dialogBuilder = AlertDialog.Builder(requireContext())
               dialogBuilder.setTitle("아이디 입력 오류")
               dialogBuilder.setMessage("아이디를 입력해주세요")
               dialogBuilder.setPositiveButton("확인"){dialogInterface: DialogInterface, i: Int->
joinFragmentBinding.joinId.requestFocus() //자동으로 아이디 입력란에 포커싱 주게 설정
}
dialogBuilder.show()
               return@setOnClickListener //코틀린에서 람다함수 (setOnClickListener)는 return@로 실행 종료시켜준다.
              }

            //PW 입력값에 대하여
            if(joinPw == null || joinPw.length == 0) {
                val dialogBuilder = AlertDialog.Builder(requireContext())
                dialogBuilder.setTitle("비밀번호 입력 오류")
                dialogBuilder.setMessage("비밀번호를 입력해주세요")
                dialogBuilder.setPositiveButton("확인"){dialogInterface: DialogInterface, i: Int->
joinFragmentBinding.joinPw.requestFocus()
}
dialogBuilder.show()
                return@setOnClickListener
            }

            //화면 전환 -> 닉네임 설정 화면
            val act =activityas MainActivity

            //가입화면에서 id/pw 입력 후 전환된 닉네임 입력 프래그먼트에서는 이 데이터값을 서버에 전달할 필요가 있다.
            //따라서 여기서 데이터를 임시로 한 번 담아준다.
            act.userId = joinId
            act.userPw = joinPw

            act.fragmentController("nick_name", true, true)
}

return joinFragmentBinding.root
}

}

🟧 3) NickNameFragment.kt

  • 사용자가 닉네임 입력하지 않고 확인 누르면, 유효성 검사를 거쳐서 알림이 뜨고 입력란에 자동 포커싱하도록 이벤트 처리.
package com.example.app3_communityapp

import android.content.DialogInterface
import android.content.Intent
import android.os.Bundle
import android.util.Log
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.app.AlertDialog
import com.example.app3_communityapp.databinding.FragmentNickNameBinding

class NickNameFragment : Fragment() { // '닉네임 입력' 프래그먼트
    //바인딩 설정
    lateinit var nickNameFragmentBinding : FragmentNickNameBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment

        nickNameFragmentBinding = FragmentNickNameBinding.inflate(inflater)
        // -> 툴바 제목 설정
        nickNameFragmentBinding.nicknameToolbar.title= "닉네임 설정"
        // 백 스택에 저장된 프래그먼트들을 완전히 종료하기 위함
        // 로그인 시도가 완료된 뒤에는 '뒤로가기' 를 눌러도 액티비티가 종료되어야 한다.
        // -> 닉네임 설정 버튼 클릭 시 -> 새로운 주기를 갖는 메인 액티비티를 다시 띄워주어야 함
        nickNameFragmentBinding.nicknameJoinBtn.setOnClickListener{
//사용자 입력값 가져오기
            val nickNameNickName = nickNameFragmentBinding.nicknameNickname.text.toString()
            //유효성 검사
            if(nickNameNickName == null || nickNameNickName.length == 0) {
                val dialogBuilder = AlertDialog.Builder(requireContext())
                dialogBuilder.setTitle("닉네임 입력 오류")
                dialogBuilder.setMessage("닉네임을 입력해주세요")
                dialogBuilder.setPositiveButton("확인"){dialogInterface: DialogInterface, i: Int->
nickNameFragmentBinding.nicknameNickname.requestFocus()
}
dialogBuilder.show()
                return@setOnClickListener
            }

            //사용자가 여기서 입력한 '닉네임' 데이터도 다시 서버로 보낼 용도로 여기서 담아준다.
            val act =activityas MainActivity
            act.userNickName = nickNameNickName

            Log.d("test", "${act.userId}")
            Log.d("test", "${act.userPw}")
            Log.d("test", "${act.userNickName}")

            val mainIntent = Intent(requireContext(), MainActivity::class.java)
            startActivity(mainIntent)
activity?.finish() //기존 액티비티 종료
}

return nickNameFragmentBinding.root
}

}
  • 또한, 여기서 입력한 닉네임값과 앞서 입력하여 넘겨받은 ID/PW 값은 서버와 DB에도 보내야 하기 때문에 임시로 담아두고 Log.d로 잘 담겼는지 확인을 거친다.

🟧 최종 실행

 

🟧 최종 실행 - 닉네임 관련

728x90