과제 내용이 변경되었다
회원가입때 입력한 아이디와 비밀번호를 putExtra로 넘기고 setExtra로 받았는데 registerForActivityResut를 활용하라고 바꼈다.......
그이유는 회원가입을 완료했을 때 다시 로그인 화면을 불러오는게 아니라 회원가입화면을 종료시켜서 로그인 화면으로 넘어가야하기 때문이다
순서는 로그인페이지에서 회원가입을 눌러 가입을 진행하고 회원가입이 완료되면 가입 시 작성 된 아이디와 비밀번호가 로그인 페이지에 자동으로 뜨게된다
이후 로그인이 완료 되면 홈화면에는 로그인할때 쓴 아이디와 회원가입할 때 쓴 이름이 보이게 된다
기존에 회원가입 페이지에서 데이터를 넘겨준 코드를 살펴보자
SignpActivity.kt
nsigninButton.setOnClickListener {
when{
myname.text.isEmpty() -> {
Toast.makeText(this,"입력되지 않은 정보가 있습니다.", Toast.LENGTH_SHORT).show()
}
nidText.text.isEmpty() -> {
Toast.makeText(this,"입력되지 않은 정보가 있습니다.", Toast.LENGTH_SHORT).show()
}
npwText.text.isEmpty() -> {
Toast.makeText(this,"입력되지 않은 정보가 있습니다.", Toast.LENGTH_SHORT).show()
}
else -> {
Toast.makeText(this,"회원가입 완료", Toast.LENGTH_SHORT).show()
val intent = Intent(this, Signin::class.java)
intent.putExtra("nidText", nidText.text.toString())
intent.putExtra("npwText", npwText.text.toString())
intent.putExtra("myname", myname.text.toString())
startActivity(intent)
}
}
}
putExtra로 넘기고 startActivity로 로그인페이지(signin)를 불러오고 있다
이번엔 수정된 코드를 보자
nsigninButton.setOnClickListener {
when{
myname.text.isEmpty() -> {
Toast.makeText(this,"입력되지 않은 정보가 있습니다.", Toast.LENGTH_SHORT).show()
}
nidText.text.isEmpty() -> {
Toast.makeText(this,"입력되지 않은 정보가 있습니다.", Toast.LENGTH_SHORT).show()
}
npwText.text.isEmpty() -> {
Toast.makeText(this,"입력되지 않은 정보가 있습니다.", Toast.LENGTH_SHORT).show()
}
else -> {
Toast.makeText(this,"회원가입 완료", Toast.LENGTH_SHORT).show()
val intent = Intent(this, Signin::class.java)
intent.putExtra("nidText", nidText.text.toString())
intent.putExtra("npwText", npwText.text.toString())
intent.putExtra("myname", myname.text.toString())
setResult(RESULT_OK, intent)
finish()
}
}
}
수정된 코드를 보면 로그인페이지를 다시 불러오는게 아니라 회원가입페이지를 종료하면서 로그인페이지로 넘어가게 되어있다
이 때 로그인 페이지로 갔을 때 회원가입때 넘겨준 데이터는 registerForActivityResult로 받아야한다
그래서 startActivity(intent)가 아니라 setResult(RESULT_OK, intent)로 수정되었다
이제 넘겨준 데이터를 받아야 한다
이전에 작성한 코드를 살펴보자
Signin.kt
class Signin : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val idText = findViewById<EditText>(R.id.tv_sid)
val pwText = findViewById<EditText>(R.id.tv_spw)
val signinButton = findViewById<Button>(R.id.bt_signin)
val signupButton = findViewById<Button>(R.id.bt_signup)
val nid = intent.getStringExtra("nidText")
val npw = intent.getStringExtra("npwText")
val myname = intent.getStringExtra("myname")
idText.setText(nid)
pwText.setText(npw)
signinButton.setOnClickListener {
when{
idText.text.isEmpty() && pwText.text.isEmpty() -> {
Toast.makeText(this,"아이디와 비밀번호를 입력해주세요", Toast.LENGTH_SHORT).show()
}
idText.text.isEmpty() -> {
Toast.makeText(this,"아이디를 입력해주세요", Toast.LENGTH_SHORT).show()
}
pwText.text.isEmpty() -> {
Toast.makeText(this,"비밀번호를 입력해주세요", Toast.LENGTH_SHORT).show()
}
else -> {
Toast.makeText(this,"로그인 성공", Toast.LENGTH_SHORT).show()
val intent = Intent(this, HomeActivity::class.java)
intent.putExtra("idText",idText.text.toString())
intent.putExtra("myname", myname)
startActivity(intent)
}
}
}
signupButton.setOnClickListener {
val intent = Intent(this, SignpActivity::class.java)
startActivity(intent)
}
}
}
이전 코드를 보면 onCreate 함수 안에서 intent.getStringExtra로 받고 있고 회원가입 버튼을 눌렀을 때 startActivitiy로 화변을 전화시키고 있다
이번에 수정된 코드를 살펴보자
class Signin : AppCompatActivity() {
lateinit var idText: EditText
lateinit var pwText: EditText
lateinit var myname: String
private var resultLanuncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
result ->
if(result.resultCode == Activity.RESULT_OK) {
val nid =result.data?.getStringExtra("nidText")
val npw = result.data?.getStringExtra("npwText")
myname = result.data?.getStringExtra("myname").toString()
idText.setText(nid)
pwText.setText(npw)
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
idText = findViewById(R.id.tv_sid)
pwText = findViewById(R.id.tv_spw)
val signinButton = findViewById<Button>(R.id.bt_signin)
val signupButton = findViewById<Button>(R.id.bt_signup)
signinButton.setOnClickListener {
when{
idText.text.isEmpty() && pwText.text.isEmpty() -> {
Toast.makeText(this,"아이디와 비밀번호를 입력해주세요", Toast.LENGTH_SHORT).show()
}
idText.text.isEmpty() -> {
Toast.makeText(this,"아이디를 입력해주세요", Toast.LENGTH_SHORT).show()
}
pwText.text.isEmpty() -> {
Toast.makeText(this,"비밀번호를 입력해주세요", Toast.LENGTH_SHORT).show()
}
else -> {
Toast.makeText(this,"로그인 성공", Toast.LENGTH_SHORT).show()
val intent = Intent(this, HomeActivity::class.java)
intent.putExtra("idText",idText.text.toString())
intent.putExtra("myname", myname)
startActivity(intent)
}
}
}
signupButton.setOnClickListener {
val intent = Intent(this, SignpActivity::class.java)
resultLanuncher.launch(intent)
}
}
}
회원가입 버튼을 눌렀을때 resultLanuncher.launch(intent)로 회원가입페이지로 전환시키고
데이터를 받을 때는 resultLanuncher를 선언해준 후에 if문 안에서 result.data?.getStringExtra로 데이터를 받아준다
이때 함수 밖에서 껍데기를 선언을 해주고 데이터를 받아오면서 속을 채워준다
항상 이부분이 너무 헷갈리는데 설명을 들을 때만 이해가된다 ㅠㅠ
데이터를 받은 후 textView에 띄우는건 이전과 동일하게 setText로 진행하면 된다
로그인 페이지 만들기 4 (0) | 2024.03.27 |
---|---|
로그인 페이지 만들기 2 (0) | 2024.03.25 |
로그인 페이지 만들기 1 (0) | 2024.03.21 |
개인과제 시작 2 (0) | 2024.03.07 |
개인과제 시작 1 (0) | 2024.03.06 |