[ Android Studio ] #21. ToDoList 어플을 만들어보자 - Database 연결 (2)

ma.caron_g·2022년 2월 4일
0
post-thumbnail

< 참고 링크 >

[ MainActivity 클래스 ]

메인 액티비티 클래스로 가서 데이터베이스를 생성하는 작업과 btnAdd의 이벤트를 만들어보겠습니다.

[ 데이터베이스 생성 ]

public static NoteDatabase noteDatabase= null; 로 NoteDatabase를 초기화 시켜주고 다음 코드를 입력합니다.

//MainActivity.java
public static NoteDatabase noteDatabase = null;

    public void openDatabase() {

        if(noteDatabase != null){
            noteDatabase.close();
            noteDatabase = null;
        }

        noteDatabase = NoteDatabase.getInstance(this);
        boolean isOpen = noteDatabase.open();
        if (isOpen){
            Log.d(TAG, "Note database is open.");
        }
        else {
            Log.d(TAG, "Note database is not open.");
        }
    }

    protected void onDestroy() {
        super.onDestroy();

        if(noteDatabase != null) {
            noteDatabase.close();
            noteDatabase = null;
        }
    }

NoteDatabase에서 정의했던 oepn()close()메서드가 여기서 쓰입니다.
데이터 베이스를 열거나, 없으면 만드는 역할을 합니다.

그 후 openDatabase()onCreate()메서드 안에 써서 앱이 실행될 때 openDatabase()가 실행하게 해줍니다.

이 클래스에서는 마지막으로 btnAdd의 이벤트를 정의해봅시다.
이전에 만들었던 saveToDo()메서드를 이용할 것입니다.
EditTextContext변수를 선언해주고 saveToDo메서드 안에 다음 코드를 작성합니다.

private void saveToDo() {

        inputToDo = findViewById(R.id.inputText);

        String todo = inputToDo.getText().toString();

        String sqlSave = "insert into" + NoteDatabase.TABLE_NOTE + " (TODO) values (" +
                "'" + todo + "')";

        NoteDatabase database = NoteDatabase.getInstance(context);
        database.execSQL((sqlSave));

        inputToDo.setText("");
    }
}

EditText에 적힌 글을 String todo로 가져와 테이블에 값을 추가하는 SQL문을 만들고 execSQL을 통해 실해합니다.




이제는 btnRemove의 클릭 이벤트를 만들어봅시다.

[ NoteAdapter 클래스 ]

[ Q. 왜 여기서 이벤트를 만들어? ]

리스트 아이템으로 만들어지는 파트가 뷰홀더이기 때문에 각각의 버튼을 구별하기 위해서는 뷰홀더 내에서 만들 때 버튼 이벤트도 같이 만들자 생각했다고 합니다.

다음 코드를 ViewHolder 메서드 내에 작성합니다.

 Context context;
    private void removeToDo(String TODO) {
        String deleteSql = "delete from " + NoteDatabase.TABLE_NOTE + " where " + " TODO = '" + TODO + "'";
        NoteDatabase database = NoteDatabase.getInstance(context);
        database.execSQL(deleteSql);
}

removeToDo 밖에 Context변수를 선언하고 안에서 deleteSQL로 테이블을 삭제하는 sql문을 만들어 실행합니다.
CheckBox에서 입력된 String을 다시 받아와 그 String을 토대로 테이블을 찾아 삭제하는 방식입니다.

이제 에뮬레이터를 실행해봅니다.

EditText에 일정을 입력하고 "일정 추가"(btnAdd)를 눌러주게 되면
안드로이드 스튜디오 아래 App Inspection에서 내가 만들어 놓은 데이터베이스와 테이블, 값들을 확인할 수 있습니다.

그러나 저장한 리스트 아이템들이 에뮬레이터 화면에 표시가 되지 않고 있습니다.

다음 게시글에서 띄워보겠습니다.

profile
다른 사람이 만든 것을 소비하는 활동보다, 내가 생산적인 활동을 하는 시간이 더 많도록 생활화 하자.

0개의 댓글