Y_Ding

내배캠 개인과제 TIL 본문

TodayILearned/Android&Kotlin

내배캠 개인과제 TIL

YJ_ILY 2023. 8. 10. 20:56

registerForActivityResult() 를 활용하여 데이터 받아오기

registerForActivityResult() 

  • 결과 콜백을 등록
  • ActivityResultContract와 ActivityResultCallback을 가져와서 다른 activity를 실행하는 데 사용할 ActivityResultLauncher를 반환
  • ActivityResultContract는 우리가 결과를 생성하는 데 필요한 입력의 형태와 결과를 출력하는 형태를 정의하고 우리가 intent를 사용하는 작업의 기본적인 계약을 제공

 

자기소개 어플을 만드는 개인 필수 과제를 끝내고 추가 선택 과제를 도전하기로 했다.

선택 과제는 회원 가입페이지에서 입력한 아이디/비밀번호를 로그인 화면으로 돌아올 때 자동 입력되게끔 하는 기능을 구현하는 것이었는데 registerForActivityResult를 이용하면 된다는 힌트를 확인하고 구글링을 했다.

내가 참고한 블로그 링크 : https://jige.tistory.com/36 

위와 같은 설명과 함께 예시를 보고 내가 만든 코드에 추가로 작성하고 실행해 보았다.

 

[Android] 안드로이드 registerForActivityResult()란?(startActivityForResult derpecated 해결 방법)

이번 포스팅은 액티비티끼리 데이터를 주고받을 때 사용하는 startActivityForResult derpecated 됨에 따라 해결 방법을 포스팅해 보겠다. # registerForActivityResult란? 공식 문서에 나와있는 내용을 정리해 보

jige.tistory.com

이름, 아이디, 비밀번호 입력 후 회원가입 버튼을 눌렀는데 앱이 종료되었다.

하루종일 이런저런 방법을 다 써보고 있는데 해결되지 않는다.해결될 때까지 계속 도전..!

 

해결

처음엔 resultLauncher에 대한 코드를 함수로 만들어서 그 안에 내용을 넣었었는데 실행할 때마다 회원가입 버튼을 누르면 앱이 종료됐다.

솔직히 아직도 정확한 이유는 모르겠지만 아래 코드와 같이 수정하고 실행해보니 내가 원하는대로 회원가입 화면에서 입력한 아이디와 비밀번호가 로그인 화면으로 전달되는 것을 확인했다.

회원가입에서 입력한 정보를 로그인 화면으로 전달받음

SignInActivity.kt
// 기존 코드에서 추가된 코드

class SignInActivity : AppCompatActivity() {
    lateinit var resultLauncher: ActivityResultLauncher<Intent>

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val id = findViewById<EditText>(R.id.editTextId)
        val password = findViewById<EditText>(R.id.editTextPassword)
        val btn2 = findViewById<Button>(R.id.btn_signup)

        resultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
            if (it.resultCode == RESULT_OK) {
                val user_id = it.data?.getStringExtra("id") ?:""
                val user_pw = it.data?.getStringExtra("password") ?:""
                id.setText(user_id)
                password.setText(user_pw)
            }
        }
SignUpActivity.kt

btn.setOnClickListener{
            if(inputName.text.isEmpty() || inputId.text.isEmpty() || inputPassword.text.isEmpty()){
                Toast.makeText(this, "입력되지 않은 정보가 있습니다.", Toast.LENGTH_SHORT).show()
            } else{
                intent.putExtra("id",inputId.text.toString())
                intent.putExtra("password",inputPassword.text.toString())
                setResult(RESULT_OK,intent)
                finish()
            }
        }
        
// 기존 코드에서 추가된 코드
intent.putExtra("id",inputId.text.toString())
intent.putExtra("password",inputPassword.text.toString())
setResult(RESULT_OK,intent)

 

이전 자기소개 어플

2023.08.09 - [TodayILearned/Android] - 내배캠 개인과제 TIL (08.08~08.09)

 

내배캠 개인과제 TIL (08.08~08.09)

자기소개 앱 만들기 직접 해보기 XML 원하는 로고 이미지 넣기 우선 내가 원하는 이미지 파일을 저장하기 res -> drawable 파일에 넣어주기 아이디, 비밀번호를 입력받는 EditText 미리보기 글씨는 hint

yjily.tistory.com