프로젝트 막히는 부분 정리!!
제가 지금 2시간동안 계속해서 풀어보고 있는데 도저히 해결이 되지 않는 부분이 있습니다!
지금은 그 코드를 한 번 정리해보고 다른 방식으로 더 시도해보려 합니다!
setOnMenuItemClickListener {
when (it.itemId) {
R.id.inputstudentmenu -> {
var name = nameTextField.text.toString()
var grade = gradeTextField.text.toString().toInt()
var kor = korTextField.text.toString().toInt()
var eng = engTextField.text.toString().toInt()
var math = mathTextField.text.toString().toInt()
var info1 = InfoClass(name, grade, kor, eng, math)
var newIntentt = Intent()
newIntentt.putExtra("info1", info1)
setResult(RESULT_OK, newIntentt)
finish()
}
}
true
}
이 프로젝트를 간단히 설명하자면 상대방에게 이름과 성적을 입력받고
상대방이 입력한 내용을 mainActivity에 RecyclerView를 활용하여 배치하는 것입니다!
- 제가 지금 해결하지 못한 부분은 사용자가 이름과 성적을 적어야하는 TextField에 아무 내용도 작성하지 않을 경우
DiaLog를 활용하여 창을 띄우고 싶은데 위의 코드에서 계속 if문을 활용하여 배치를 해봐도 해결이 되지 않습니다!
현재 다른 코드들은 잘 작동하나 딱 저부분만 누르면 자꾸 단말기에서 어플이 종료가 됩니다..
setOnMenuItemClickListener {
when (it.itemId) {
R.id.inputstudentmenu -> {
var name = nameTextField.text.toString().trim()
var gradetext = gradeTextField.text.toString().trim()
var kortext = korTextField.text.toString().trim()
var engtext = engTextField.text.toString().trim()
var mathtext = mathTextField.text.toString().trim()
if (name.isEmpty() || gradetext.isEmpty() || kortext.isEmpty() || engtext.isEmpty() || mathtext.isEmpty()) {
var builder =
MaterialAlertDialogBuilder(this@SecondActivity).apply {
//타이틀
setTitle("입력 오류")
//메시지
setMessage("정보를 알맞게 입력하시오")
//긍정 버튼
setPositiveButton("확인") { dialogInterface: DialogInterface, i: Int ->
}
//부정 버튼
setNegativeButton("취소") { dialogInterface: DialogInterface, i: Int ->
}
}
builder.show()
} else {
try {
var grade = gradetext.toInt()
var kor = kortext.toInt()
var eng = engtext.toInt()
var math = mathtext.toInt()
var info1 = InfoClass(name, grade, kor, eng, math)
var newIntentt = Intent()
newIntentt.putExtra("info1", info1)
setResult(RESULT_OK, newIntentt)
finish()
}catch (e: Exception){
}
}
}
}
true
}
드디어!!!!!!!!!!!!!!!!!! 드디어 해결을 했습니다!!
구글링을 하다가 유효성 검사를 해야한다고 해서 전에 Kotlin 문법을 할 때 배웠던 try , catch를 활용하여
코드를 작성해보았습니다!
(물론 구글에서 도움을 받은 것도 있습니다!)
전에 제가 해멨던 첫 번째 코드를 보면 name은 string타입 이지만 grade, kor, eng, math은 Int타입이기 때문에
isEmpty()를 사용할 수 없었습니다.
그렇기에 모두 string타입으로 설정을 한 후 if문을 활용하여 사용자가 한 곳이라도 입력을 안한 곳이 있는지 찾고
다시 grade, kor, eng, math을 Int타입으로 변환하여 전달했습니다!
try , catch란?
// 예외 : 대처가 가능한 오류들을 의미한다.
// 자바에서는 예외 상황에 대한 것들을 클래스로 만들어 제공하고 있다.
// 예외가 발생하면 발생된 예외와 관련된 클래스의 객체를 생성하여 개발자에게 전달해준다.
// 이 객체에는 오류와 관련된 정보가 담겨져 있다.
// try : 개발자가 구현하는 코드 부분
// catch : try 부분에서 예외가 발생했을 때 동작하는 코드
// try 부분에서 예외가 발생되면 try 부분의 수행은 중단되고 catch 부분으로 넘어간다.
// 예외가 발생되면 VM은 프로그램을 강제 종료시킨다.
// 예외 처리의 목적은 예외 발생시 프로그램이 강제 종료되지 않도록 하고 catch에 작성한 코드가
// 동작될 수 있도록 함에 있다.
느낀점 : 강사님께 여쭤보거나 다른 스터디원들에게 물어볼 수도 있었지만 제가 스스로 꼭 문제를 해결하고 싶어 끝까지 해보게 되었습니다. 물론 시간이 부족하기 때문에 물어보고 해결할 수도 있지만
저는 아직 배우는 단계이고 시간이 걸리더라도 스스로 해결해보는 것이 좋다고 생각하기 때문에
비록 3시간이 걸리긴 하였지만 마음은 굉장히 뿌듯합니다!!!