안드로이드 JSON 형식과 sharedPreference 이용한 데이터 저장

송민준·2021년 10월 10일
1

아이디와 비밀번호, 이름 등 정보를 저장하고, 로그인할 때 정보를 불러와서 아이디와 비밀번호를 매칭시키는 안드로이드 프로그램을 만드는 중

정보를 저장하는 메서드를 찾다가
sharePreference 라는 유용하고 간단한 메서드를 사용하기로 했다.

정의

'''
SharedPreferences sharedpreferences = getSharedPreferences("idfile", 0);
'''
사용하기전 정의를 해줘야하는데 getSharedPreferences의 첫번째 인자는
우리가 정보를 저장할 파일의 이름, 두번째 인자는 프레퍼런스를 다른 액티비티에 공유할 지 정하는 인자이다.

저장

'''
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString(id_p, "password");
editor.commit();
'''
Editor를 선언한 다음
putString으로 아이디와 비밀번호를 페어로 저장한다.

불러오기

'''
String response = sharedpreference.getString(id_p, "");
'''
getString으로 id_p 를 키값으로 가진 정보를 가져온다.
getString의 두번째 인자는 만약 id_p 가 없다면 리턴되는 인자이다.

파일에는
<키 값, 저장할 정보>
형태로 저장이 되는데, 모두 String 이다.

문제가 있는데 구현할 것은 아이디, 비밀번호 뿐만 아니라 이름, 전화번호등 더 많은 정보를 저장해야한다.
아이디, 비밀번호만 매칭하면 <아이디, 비밀번호> 이런식으로 저장하면 되지만 더 많은 정보를 저장하려면 다른 방법이 필요해 보였다.

### JSON

json 을 여러번 들어봤지만 직접 써보지는 않았다. 아마 웹에서 데이터를 전송할 때 사용되는 형식으로 들었던 것 같다.

JavaScript Object Notation (JSON)은 Javascript 객체 문법으로 구조화된 데이터를 표현하기 위한 문자 기반의 표준 포맷입니다
https://developer.mozilla.org/ko/docs/Learn/JavaScript/Objects/JSON

때문에 JSON을 String 객체로 변환시켜서 저장한 후 불러올 때 JSON 형식으로 파싱하면 여러 데이터를 하나의 키값으로 매치시킬 수 있다.

####JSON 생성, 데이터 저장
'''
JSONObject infoJson = new JSONObject();
try {
infoJson.put("ID", id_p);
infoJson.put("PW", pw_p);
infoJson.put("name", name_p);
infoJson.put("call", call_p);
infoJson.put("address", address_p);
}
catch (JSONException e) {
e.printStackTrace();
}
editor.putString(id_p, infoJson.toString());
editor.commit();
'''
JSONOject 객체를 생성한 후
put 메서드로 키, 데이터를 객체에 넣는 모습
다음 editor로 정보를 저장할 때 인자에 toString으로 형변환해서 넣는다.

####불러오기, JSON 파싱
'''
String response = sharedpreference.getString(id_p, "");
try {
JSONObject infoJson = new JSONObject(response);
String curr_pw = infoJson.get("PW").toString();
} catch (JSONException e) {
e.printStackTrace();
}
'''
받아온 정보는 String 객체이기 때문에 JSONObject 객체 생성과 동시에 파싱
get(키값) 으로 원하는 정보를 꺼낼 수 있다.

####마침
sharedPreference 와 JSON에 대해 거의 모르는 상태라서 꽤 서칭했던 것 같다.
JSON은 다양하게 사용되기 때문에 익혀놓는게 좋을 것 같다.

부족한 글 읽어주셔서 감사합니다. 피드백 환영

profile
개발자

0개의 댓글