러닝패스 [#A2]에서는 SharedPreferences를 이용한 간단한 데이터 저장 방법을 소개했습니다. 이것은 확실히 간단한 데이터 셋 저장에는 유리하지만, 복잡한 데이터 셋들을 관리하기에는 JSON 데이터 형식으로 앱에 저장하는게 훨씬 유리합니다.
따라서 오늘은 SharedPreferences.xml 과 마찬가지로 JSON 데이터 파일을 저장하고, 읽어오는 방법에 대해 알아보겠습니다.
*WRITE
JSON 데이터를 쓰는 방법은 이렇게 동작합니다.
저장할 데이터의 POJO 클래스를 생성 -> POJO 클래스의 인스턴스를 이용해 데이터를 SET -> POJO 클래스의 인스턴스를 JSON 형식으로 변환 후 지정된 FileName으로 FileOutputStream을 이용해 쓰기
1.예시로 생성한 POJO 클래스 Note.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | public class Note { private String title; private String note; private String date; public void setTitle(String title) { this.title = title; } public void setNote(String note) { this.note = note; } public void setDate(String date) { this.date = date; } public String getTitle() { return title; } public String getNote() { return note; } public String getDate() { return date; } } | cs |
Note 클래스는 세 가지의 데이터, 즉 title, note, date를 받습니다. 따라서 저장될 JSON 데이터는 이 세 가지의 데이터를 저장하고, 또 가져오는 형태가 됩니다.
2. Note 클래스(POJO)의 인스턴스 생성 및 데이터 SET
1 2 3 4 | Note note = new Note(); note.setTitle(title); note.setNote(note); note.setDate(date); | cs |
3. Note 클래스의 인스턴스를 JSON으로 변환 후 FileName으로 FileOutputStream을 이용해 쓰기
JSON으로 변환하기 전, FileName을 지정해줍니다.
1 | String filename = currentDate+".json"; | cs |
이름에 형식은 없으며, 마지막 ".json" 으로 반드시 데이터 저장 형식을 JSON으로 지정합니다.
다음으로 JsonUtil.toJson() 메소드를 이용해 Note 클래스의 인스턴스 note 를 JSON 형식을 거쳐 String 형식으로 변환한 후, FileOutputStream을 사용해 쓰기를 완료하면 데이터 저장이 완료됩니다.
***반드시 여기에서 JsonUtil의 소스 코드를 확인 후 추가하세요***
1 2 3 4 5 6 7 8 9 10 11 12 13 | FileOutputStream outputStream; try { outputStream = openFileOutput(filename, Context.MODE_PRIVATE); outputStream.write(JsonUtil.toJSon(note).getBytes()); outputStream.close(); } catch (Exception e) { e.printStackTrace(); } | cs |
SOURCE CODE
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | Note note = new Note(); note.setTitle(title); note.setNote(note); note.setDate(date); String filename = currentDate+".json"; FileOutputStream outputStream; try { outputStream = openFileOutput(filename, Context.MODE_PRIVATE); outputStream.write(JsonUtil.toJSon(note).getBytes()); outputStream.close(); } catch (Exception e) { e.printStackTrace(); } | cs |
*READ
JSON 데이터를 읽는 방법은 이렇게 동작합니다.
지정된 경로에 파일이 있는지 확인 -> 파일을 String 형태로 가져온 후, JSONObject로 데이터 추출
1.지정된 경로에 파일이 있는지 확인
먼저 지정한 FileName을 이용해 파일의 정보를 가져옵니다
1 | File file = new File(getApplication().getFilesDir(), currentDate+".json"); | cs |
이후 이 파일의 유무는 아래의 if 문으로 확인할 수 있습니다.
1 | if( file.exists() ) | cs |
2.파일을 String 형태로 가져온 후, JSONObject로 데이터 추출
만약 성공적으로 데이터의 존재를 확인했다면 String 형태로 data를 가져온 후, JSONObject를 이용해 세 가지 데이터, 즉 title, note, date를 추출합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | try { String data = getStringFromFile(file.getPath()); JSONObject jObj = new JSONObject(data); String downloadTitle = jObj.getString("title"); String downloadNote = jObj.getString("note"); String downloadDate = jObj.getString("date"); }catch (Exception e){ e.printStackTrace(); } | cs |
SOURCE CODE
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | if(file.exists()){ try { //READ NOTE String data = getStringFromFile(file.getPath()); JSONObject jObj = new JSONObject(data); String downloadTitle = jObj.getString("title"); String downloadNote = jObj.getString("note"); String downloadDate = jObj.getString("date"); }catch (Exception e){ e.printStackTrace(); } } | cs |
'안드로이드 > 러닝패스' 카테고리의 다른 글
[#A5 DEPRECATED] SNS 같은 FEED를 만드는 방법 (0) | 2018.12.04 |
---|---|
[#A4 DEPRECATED] 내 앱에서 쉽게 외부와 JSON 데이터를 주고 받는 방법 <Volley> (0) | 2018.11.30 |
[#A2 DEPRECATED] 간단한 저장소가 필요할 때, SharedPreference (0) | 2018.11.29 |
[#A1 DEPRECATED] 내 앱에 원형 프로필 사진 위젯을 추가하는 가장 손쉬운 방법 (0) | 2018.11.28 |