오늘은 개인과제인 자기소개앱을 만들어봤다.
먼저 mainActivity의 이름을 SignInActivity로 바꿔주고, 화면구성을 해줬다.

3개의 ImageView, 2개의 TextView, 2개의 editText로 화면을 구성해줬다.
editText에서 hint속성을 넣어서 이 칸이 어떤 내용을 입력해야하는지 알려주는 내용을 적어줬고, 비밀번호editText는 inputType을 textPassword로 설정해줘서 입력할때 내용을 그대로 보여주지 않고 적은 내용을 안보이게 만들어줬다. 그리고 아래에 Login이미지와 SignUp이미지는 버튼을 대신해서 만들어줬다.

다음은 SignUpActivity화면을 구성해줬고, 회원가입할때 필요한 정보들을 입력할 수 있게 만들어뒀다. 회원가입이 이번과제의 주된 기능은 아니였기 때문에 특별한 제약조건은 넣지 않았다.

마지막으로 회원가입에 성공시 나타나는 HomeActivity이다. 아이디와 이름은 코드에서 로그인시 입력한 내용을 받아와서 출력시킬 예정이다. 종료 버튼을 누르면 다시 처음 화면인 SignInActivity로 이동한다.
회원가입을 어떻게 진행시킬까 하다가 User라는 클래스를 만들기로 했다. 그래서 해당 클래스에서 리스트를 하나 생성해서, 회원가입한 사용자의 정보를 저장하기로 했다.
class User {
data class ListType(
val myId:String,
val myName:String,
val myPassword:String
) : Serializable // 객체의 상태를 외부에 저장하거나 전송할 수 있도록 하는 인터페이스.
companion object{
val myIdList = mutableListOf<ListType>()
}
}
그후, 회원가입 페이지에서 모든 내용이 다 입력되었을때, 리스트에 내용을 추가해주고, 토스트메세지를 띄워줬다.
val myListType = User.ListType(editId.text.toString(), editName.text.toString(), editPassword.text.toString())
User.myIdList.add(myListType)
Toast.makeText(this, "회원가입이 완료되었습니다..", Toast.LENGTH_SHORT).show()
이후 로그인시 리스트에 입력된 아이디 및 비밀번호가 일치하는 정보가 있을경우 리스트 정보화 함께 HomeActivity로 화면을 전환시켜줬다.
val loginIntent = Intent(this, HomeActivity::class.java)
loginIntent.putExtra("UserData", value)
startActivity(loginIntent)
그후 HomeActivity에서는 전달받은 리스트의 정보를 받아오고, 화면에 띄워줬다.
val userData = intent.getSerializableExtra("UserData") as? User.ListType
if(userData != null){
var id = userData.myId
var name = userData.myName
calledID.setText(id)
calledName.setText(name)
}
그리고 HomeActivity에서 나오는 사진을 로그인 할때마다 랜덤한 사진으로 바꾸기 위해서 우선 원하는 이미지 사진 5개를 형식에 맞춰서 res/drawable/폴더 안에 넣어줬다. 나는 myimage1~5이렇게 5개를 준비해서 넣어줬다. 그 후에 배열에 해당 이미지들을 넣어주고, Random함수를 이용해서 랜덤한 이미지를 띄워줬다.
val imageArray = arrayOf(
R.drawable.myimage,
R.drawable.myimage2,
R.drawable.myimage3,
R.drawable.myimage4,
R.drawable.myimage5,
)
val randomImage = imageArray[Random.nextInt(imageArray.size)]
imageView.setImageResource(randomImage)
여기서는 회원가입 페이지로 이동후에, 회원가입이 완료되면 다시 로그인 화면으로 돌아온다. 이때 회원가입을 할때 사용한 아이디와 비밀번호를 registerForActivityResult를 이용해서 editText에 가져와보려고 한다.
먼저 ActivityResultLauncher 자료형인 resultLauncher변수를 전역변수로 선언해준다.
private lateinit var resultLauncher: ActivityResultLauncher<Intent>
그리고 setResult()함수를 만들어준다. resultCode가 RESULT_OK일때만 if문을 돌아가게 하고, 이는 회원가입 페이지에서 넘겨줄 예정이다.
private fun setResult(){
resultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == AppCompatActivity.RESULT_OK) {
val id = result.data?.getStringExtra("id") ?: ""
val password = result.data?.getStringExtra("password") ?: ""
myId.setText(id)
myPassword.setText(password)
}
}
}
이후, 회원가입 페이지로 이동할때 startActivity를 이용하는 대신, 위에서 선언해준 resultLauncher를 이용해서 화면을 전환시켜준다.
//startActivity(signUpIntent)
resultLauncher.launch(signUpIntent)
그리고, 마지막으로 회원가입 페이지에서 회원가입이 완료될때, intent에 보내고싶은 갚을 넣어서 보내준다.
val intent = Intent(this, SignInActivity::class.java)
intent.putExtra("id", editId.text.toString())
intent.putExtra("password", editPassword.text.toString())
setResult(RESULT_OK, intent)
finish()
여기서 RESULT_OK와 함께 intent를 넣어서 다시 로그인 페이지로 이동시켜준다.
이렇게하면 회원가입할때 적었던 아이디 및 비밀번호를 회원가입후에 로그인 화면에서 자동으로 띄워준다.
이렇게 오늘은 자기소개앱을 만드는 시간을 가졌다. Java로 AndroidStudio를 이용해본 경험이 있어서 이런내용은 어렵지 않게 느껴졌다. 일찍 과제를 끝내서, 내일은 추가로 공부하고 싶은 내용인 Task에 대해서 공부해보려고 한다.