이전 포스팅에서 전화번호부앱 데이터를 SQLite에 저장하고 불러오는 기능을 추가했습니다.
이번에는 저장된 데이터를 삭제, 수정하는 기능을 추가하겠습니다.
안드로이드 개발자 문서를 참고했습니다.
https://developer.android.com/training/data-storage/sqlite
-MainActivity 에서 deleteNumber 메서드 추가하고 리사이클러뷰 클릭 이벤트중 삭제 버튼 클릭시 메서드 실행했습니다.
......
//리사이클러뷰 클릭 이벤트
mAdapter.setOnItemClickListener (new Adapter.OnItemClickListener () {\
......
//삭제
@Override
public void onDeleteClick(View v, int position) {
String name = mArrayList.get (position).getName ();
String number = mArrayList.get (position).getNumber ();
//데이터삭제
deleteNumber (name, number);
mArrayList.remove (position);
mAdapter.notifyItemRemoved (position);
}
});
.......
//SQLite 데이터 삭제
private void deleteNumber(String name, String number) {
//WHERE 절 삭제될 열을 찾는다.
String selection = DBHelper.FeedEntry.COLUMN_NAME_NAME + " LIKE ?" +
" and " + DBHelper.FeedEntry.COLUMN_NAME_NUMBER + " LIKE ?";
//삭제될 열을 찾을 데이터
String[] selectionArgs = {name, number};
db.delete (DBHelper.FeedEntry.TABLE_NAME, selection, selectionArgs);
}
-Smith 를 삭제. 앱 종료 후 실행시 완전히 삭제된 것을 알 수 있습니다.
-MainActivity에 updateNumber() 메서드 추가하고, 다이얼로그에서 수정 버튼 클릭시 기능 동작하도록 했습니다.
.....
//SQLite 데이터 수정
//newName 은 수정된 값, oldName 수정전 값
private void updateNumber(String oldName, String oldNumber, String newName, String newNumber){
//수정된 값들을 values 에 추가한다.
ContentValues values = new ContentValues();
values.put(DBHelper.FeedEntry.COLUMN_NAME_NAME, newName);
values.put (DBHelper.FeedEntry.COLUMN_NAME_NUMBER, newNumber);
// WHERE 절 수정될 열을 찾는다.
String selection = DBHelper.FeedEntry.COLUMN_NAME_NAME + " LIKE ?" +
" AND "+ DBHelper.FeedEntry.COLUMN_NAME_NUMBER + " LIKE ?";
String[] selectionArgs = { oldName, oldNumber };
db.update(DBHelper.FeedEntry.TABLE_NAME, values, selection, selectionArgs);
}
......
//AlertDialog 를 사용해서 데이터를 수정한다.
private void editItem(String name, String number, int position) {
......
// 수정 버튼 클릭
//어레이리스트 값을 변경한다.
btn_edit.setOnClickListener (new View.OnClickListener () {
@Override
public void onClick(View view) {
String editName = edit_name.getText ().toString ();
String editNumber = edit_number.getText ().toString ();
mArrayList.get (position).setName (editName);
mArrayList.get (position).setNumber (editNumber);
//데이터 수정메서드 실행
updateNumber (name,number,editName,editNumber);
mAdapter.notifyItemChanged (position);
dialog.dismiss ();
}
});
.......
}
-Marie를 Anna로 수정했습니다.
-안드로이드 스튜디오에서 클라이언트의 SQLite을 볼 수 있습니다. 하단메뉴 중 Database Inspector에서 볼 수 있습니다.
-데이터가 변한것을 확인할 수 있습니다.
-간단한 전화번호부 앱을 완성했습니다. 데이터를 입력 받고 입력받은 값을 저장, 수정, 삭제할 수 있습니다. 이 데이터들을 리사이클러뷰에 보여집니다.
-모든 코드는 4개 포스팅을 모두 확인해보면 알 수 있습니다. 코드 리팩토링후 깃헙에 올릴 예정입니다.
-궁금한 것 있으면 댓글 부탁드립니다.
-다음 포스팅은....
xml 파일은 없나요?