본문 바로가기
내일배움캠프 (스파르타 코딩 클럽) 안드로이드 2기/TIL

[TIL] 유효성 처리 | return@ | RegisterForActivityResult

by 키윤 2023. 12. 27.

📖 Today I Learned

🔮 학습 및 노트 정리

  • 유효성 처리
    private fun getMessageValidId(): String? {
        val text = etId.text.toString()
        if (etId.isVisible) {
            val errorCode = when {
                text.isBlank() -> SignUpErrorMessage.EMPTY_ID
                (text.isNotBlank() && Pattern.matches("^[a-z0-9]*\$",text)) -> null

                else -> SignUpErrorMessage.INVALID_PASSWORD
            }
            return errorCode?.let { getString(it.message) }
        } else return null
    }

유효성처리를 할 때 정규식 표현을 위와 같이 하니까 되었다. 튜터님이 작성한 코드를 이용해서 했을 때 자꾸만 에러가 났었는데 초기 의도가 달라서 계속 오류가 났던 것 같다. 튜터님은 정규식을 이용하여 입력된 값이 틀린 경우를 찾아낸 반면에 내가 찾은 정규식은 입력 값의 조건을 가지고 있어서 내 코드에서는 정규식이 match 된 경우에 null 또는 emptyString을 반환해 주어야 했다.

  • EditText를 문자열로 바꾸기. / return@setOnClickListener
    private fun btnLogin() {
        btnLogin.setOnClickListener{
            val userData = getUser(etId.text.toString())
            when {
                etId.text.toString().trim().isEmpty() -> {Toast.makeText(this, SignUpErrorMessage.EMPTY_ID.toString(), Toast.LENGTH_SHORT).show()
                    return@setOnClickListener}
                etPw.text.toString().trim().isEmpty() -> {Toast.makeText(this, SignUpErrorMessage.EMPTY_PASSWORD.toString(), Toast.LENGTH_SHORT).show()
                    return@setOnClickListener}
                (userData == null) -> {Toast.makeText(this, SignUpErrorMessage.PASSWORD_MISMATCH.toString(), Toast.LENGTH_SHORT).show()
                    return@setOnClickListener}
                (userData.password != etPw.text.toString()) -> {Toast.makeText(this, SignUpErrorMessage.PASSWORD_MISMATCH.toString(), Toast.LENGTH_SHORT).show()
                    return@setOnClickListener}
            }

            val intent = Intent(this, MainPageActivity::class.java)

            intent.putExtra("id", etId.text.toString())

            intent.putExtra("pw", etPw.text.toString())

            startActivity(intent)
        }
    }

EditText를 문자열로 바꿀때 앞에 .text를 무조건 넣어주어야 한다. 이거 때문에 한참 오류나서 헤멨다.
그리고 return@setOnClickListener을 해줌으로써 그 뒤에 남아있는 코드를 실행해주는 대신에 setOnClickListener을 다시 실행해주는 코드이다. 나중에 잘 알고 사용하면 유용할 것 같다.

  • RegisterForActivityResult
private fun btnSignup() {
    // registerForActivityResult 세팅
    resultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
        // ChooseProfileActivity에서 RESULT_OK가 반환되면 현재 액티비티 종료
        // ChooseProfileActivity에서 바로 SignInActivity로 이동하는 형태가 됨
        if (result.resultCode == RESULT_OK) {
            // 먼저 SignInActivity로 아이디와 패스워드를 보냄
            intent.putExtra("id", etId.text.toString())
            intent.putExtra("password", etPassword.text.toString())
            setResult(RESULT_OK, intent)
            finish()
        }
    }

    btnNext.setOnClickListener {
        // 유저등록에 필요한 데이터와 함께 ChooseProfileActivity로 이동
        var intent = Intent(this@SignUpActivity, ChooseProfileActivity::class.java)
        intent.putExtra("name", etName.text.toString())
        intent.putExtra("id", etId.text.toString())
        intent.putExtra("password", etPassword.text.toString())
        resultLauncher.launch(intent)
    }
}

지난 번에 공부한 후에 RegisterForActivity를 이해한줄 알았는데 아니었다.. 지금도 솔직히 대충 이해된다..좀 더 공부해보는걸로..

💡 알고리즘 - 코틀린 : 프로그래머스 코드 카타

  • 138477

https://occhiolism.tistory.com/82

 

[프로그래머스 • 코틀린] 명예의 전당 #138477

#138477 🎄 Question ? https://school.programmers.co.kr/learn/courses/30/lessons/138477 class Solution { fun solution(k: Int, score: IntArray): IntArray { var answer: IntArray = intArrayOf() return answer } } 🧩 Thought Process 사람 1,2,3이 작성한

occhiolism.tistory.com

 

추가로 완전탐색 기본 개념 공부를 했다.

https://occhiolism.tistory.com/81

 

[알고리즘] 완전탐색

뜻 가능한 경우의 수를 모두 조사해서 정답을 찾는 방법. 활용 완전 탐색 알고리즘 동작 과정 해결하고자 하는 문제의 가능한 경우의 수를 대략적으로 계산 가능한 모든 방법을 다 고려 실제 답

occhiolism.tistory.com