ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SQLite 실습1-2(추가 : 예외처리)
    Android_Kotlin/Android_공부 2023. 8. 1. 00:40
    728x90

    지금까지의 SQLite실습에서는 숫자가 아닌 값이 수량 입력란에 입력되면 NumberFormatException 예외가 발생하여 앱이 강제로 종료되는 문제가 있었습니다.

    이번 실습에서는 이러한 예외를 처리하여 숫자가 아닌 값이 입력되어도 앱이 강제로 종료되지 않고, 사용자에게 경고 메시지를 토스트로 표시할 수 있는 코드를 수정해보겠습니다.

    문제지점

    fun insertProduct(product: Product):Boolean{
    	val values = ContentValues()
    	values.put(PNAME,product.pName)
    	values.put(PQUANTITY,product.pQuantity)
    	val db=writableDatabase
    	val flag = db.insert(TABLE_NAME,null,values)>0
    	db.close()
    	return flag
    }
    
    

    insertProduct 함수 내부에서 ContentValues에 수량을 넣을 때 put 메서드를 사용하여 PQUANTITY 컬럼에 값을 저장할 때 발생합니다. 해당 컬럼은 integer 타입으로 정의되어 있기 때문에 숫자 외의 값을 넣으면 오류가 발생하고 앱이 강제로 종료됩니다.

    해결

    해결 방법은 다음과 같습니다. 먼저 MyDBHelper.kt코드 중values.put(PQUANTITY,product.pQuantity) 부분에 예외처리 구문을 추가해야 합니다. 아래는 수정된 코드 입니다.

    **import** android.widget.Toast
    

    Toast를 발생시키기위해 코드상단부분에 import해주겠습니다.

    funinsertProduct(product: Product):Boolean{
    valvalues = ContentValues()
        values.put(PNAME,product.pName)
    try{
    valquantity = product.pQuantity.toInt()
            values.put(PQUANTITY, quantity)
        }catch(e: NumberFormatException) {
            e.printStackTrace()
            Toast.makeText(context,"잘못된 수량 값입니다.", Toast.LENGTH_SHORT).show()
    return false
    }
    valdb=writableDatabase
    valflag = db.insert(TABLE_NAME,null,values)>0
        db.close()
    returnflag
    
    }
    

    위 코드에서는 NumberFormatException이 발생한 경우에 **Toast.makeText()**를 사용하여 사용자에게 "잘못된 수량 값입니다."라는 메시지를 토스트 형태로 표시합니다. 이렇게 하면 사용자가 잘못된 입력을 감지하고 앱이 종료되지 않도록 경고를 받을 수 있습니다.

    다음으로는 insertProduct 함수가 호출되는 부분을 확인해야 합니다. 해당 함수가 호출되는 곳에서도 예외 처리를 진행해야 합니다.

    MainActivity를 살펴 보겠습니다.

    MainActivity.kt에서 insertbtn 버튼을 클릭하는 부분에서는 수량을 문자열로 변환한 후 toInt() 함수를 호출하기 전에 예외 처리를 진행해야 합니다.

    아래는 수정된 코드입니다.

    insertbtn.setOnClickListener {
    val name = pNameEdit.text.toString()
    val quantityString = pQuantityEdit.text.toString()
    try {
        val quantity = quantityString.toInt()
        val product = Product(0, name, quantity)
        val result = myDBHelper.insertProduct(product)
    
        if (result) {
            getAllRecord()
            Toast.makeText(this@MainActivity, "Data INSERT SUCCESS", Toast.LENGTH_SHORT).show()
        } else {
            Toast.makeText(this@MainActivity, "Data INSERT FAILED", Toast.LENGTH_SHORT).show()
        }
    } catch (e: NumberFormatException) {
        Toast.makeText(this@MainActivity, "잘못된 수량 값입니다.", Toast.LENGTH_SHORT).show()
    }
    
    clearEditText()
    }
    

    위 코드에서는 quantityString 변수를 사용하여 사용자가 입력한 수량 값을 문자열로 받습니다. 그리고 toInt() 함수 호출을 try-catch 블록으로 감싸 예외 처리를 진행합니다. 수량 값이 유효한 경우에만 Product 객체를 생성하고 데이터 삽입을 진행합니다. 수량 값이 유효하지 않은 경우 예외 처리 메시지를 토스트로 출력합니다.

    실행화면

    제품수량에 숫자가아닌 문자 a를 입력합니다.

    이전 처럼 어플이 강제 종료되는 대신 사용자에게 경고하는 토스트 메시지가 발생합니다.

    'Android_Kotlin > Android_공부' 카테고리의 다른 글

    fetchListData() 일반적인 디자인 패턴  (0) 2023.08.08
    Fragment와 WebData 활용하기  (0) 2023.08.01
    TextInputLayout 사용하기  (0) 2023.08.01
    SQLite 실습1-2  (0) 2023.07.31
    SQLite 실습1-1  (0) 2023.07.31
Designed by Tistory.