android에서 사용하는 여러 저장 방법 중 간단하게 사용할 수 있는 기능 입니다.
개발에 필요한 크지 않은 변수와 값들을 내부에 저장하기에 적당합니다.
key-value 형식으로 저장이 됩니다.
1. SharedPreferences
SharedPreferences에서 사용하는 상수와 Method들 입니다.
그냥 이런게 있구나 하고 보시고 필요시 사용하면 됩니다.
1.1 Constants
SharedPreference Constants
Type |
Constant |
Description |
int |
MODE_APPEND |
기존 preferences에 신규 preferences를 추가 |
int |
MODE_MULTI_PROCESS |
이미 호출되어 사용 중인지 체크 |
int |
MODE_PRIVATE |
생성한 application에서만 사용 가능 |
int |
MODE_WORLD_READABLE |
다른 application에서 읽을 수 있음 |
int |
MODE_WORLD_WRITEABLE |
다른 application에서 기록할 수 있음 |
1.2 Methods
Type |
Method |
abstract boolean |
contains(String key) |
- 키 값이 들어있는지 체크 |
|
abstract SharedPreferences.Editor |
edit() |
- 신규 Editor를 생성 |
|
abstract Map |
getAll() |
- 저장된 모든 값을 검색 |
|
abstract boolean |
getBoolean(String key, boolean defValue) |
- 키에 해당하는 boolean 값 검색 |
|
abstract float |
getFloat(String key, float defValue) |
- 키에 해당하는 float 값 검색 |
|
abstract int |
getInt(String key, int defValue) |
- 키에 해당하는 int 값 검색 |
|
abstract long |
getLong(String key, long defValue) |
- 키에 해당하는 long 값 검색 |
|
abstract String |
getString(String key, String defValue) |
- 키에 해당하는 set 형태의 string 값 검색 |
|
abstract Set |
getStringSet(String key, Set defValues) |
- 키에 해당하는 boolean 값 검색 |
1.3 Editor Methods
SharedPreference.Editor Methods
Type |
Method |
abstract void |
apply() |
- 비동기 적으로 값을 저장 한다 |
|
abstract SharedPreferences.Editor |
clear() |
- 모든 값을 삭제 한다. |
|
abstract boolean |
commit() |
- 동기 적으로 값을 저장 하고 결과를 리턴 한다 |
|
abstract SharedPreferences.Editor |
putBoolean(String key, boolean value) |
- bool 형 값을 설정 한다 |
|
abstract SharedPreferences.Editor |
putFloat(String key, float value) |
- float 형 값을 설정 한다 |
|
abstract SharedPreferences.Editor |
putInt(String key, int value) |
- int 형 값을 설정 한다 |
|
abstract SharedPreferences.Editor |
putLong(String key, long value) |
- long 형 값을 설정 한다 |
|
abstract SharedPreferences.Editor |
putString(String key, String value) |
- string 형 값을 설정 한다 |
|
abstract SharedPreferences.Editor |
putStringSet(String key, Set values) |
- set 형 값을 설정 한다 |
|
abstract SharedPreferences.Editor |
remove(String key) |
- key에 해당하는 값을 삭제 한다 |
* putxxx() 작업은 반영을 위해 commit() 또는 apply()를 호출해야 합니다.
* remove()는 반영을 위해 commit()을 호출 해야 합니다.
2. 프로그램 설명
간단히 사용하는 저장 공간이기 때문에 설치하는 것도 없고
핸들만 얻어서 사용하면 됩니다.
2.1 Handle 얻기
getSharedPreferences() : 여러개의 Shared Preference 파일들을 사용 하는 경우
getPreferences() : 한개의 Shared Preference 파일을 사용하는 경우.
여기서는 첫번째 getSharedPreferences()를 사용 합니다.
정의는
public abstract SharedPreferences getSharedPreferences (String name, int mode)
이렇게 되어 있고
사용은
SharedPreferences sharePref = getSharedPreferences("SHARE_PREF", MODE_PRIVATE);
이렇게 합니다.
SHARE_PREF라는 이름의 저장소를 생성한 application에서만
사용가능 모드로 사용하기 위해 생성합니다.
만일 SHARE_PREF 라는파일이 없으면 신규로 생성 합니다.
버튼을 클릭하면 작업을 하고 바로 리스트를 가져오도록 되어있습니다.
2.2 Data 저장
Editor를 이용하여 저장 합니다.
SharedPreferences.Editor editor = sharePref.edit();
각각의 데이터 타입별로 저장해 보았습니다.
public void saveData() { editor.putBoolean("isShare", true); editor.putFloat("fRate", 1.33f); editor.putInt("nValue", 100); editor.putString("name", "copycoding"); editor.apply(); }
2.3 Data 수정
저장과 같은 방식으로 값만 변경하면 됩니다.
public void updateData() { editor.putBoolean("isShare", false); editor.putFloat("fRate", 3.33f); editor.putInt("nValue", 5000); editor.putString("name", "copycoding.tistory"); editor.apply(); }
2.4 Data 삭제
remove()에 key값을 적어주면 됩니다.
public void deleteData() { editor.remove("nValue"); editor.commit(); }
2.5 불러오기
최초 생성한 핸들(여기서는 sharePref)을 이용해서 불러옵니다.
public void listData() { String dataList = ""; MaptotalValue = sharePref.getAll(); for(Map.Entry entry : totalValue.entrySet()) { dataList += entry.getKey().toString()+ ": " + entry.getValue().toString() + "\r\n"; Log.d("share : ", entry.getKey() + ": " + entry.getValue()); } tvList.setText(dataList); }
저는 자동으로 출력하려고 만든거고 하나씩 가져오려면
sharePref.getString(“name”, “”);
이렇게 하면 됩니다.
뒤에 “”이건 default 값을 적어주는 것입니다.
3. Source Code
3.1 activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <Button android:id="@+id/btn_onclick1" android:text="Save" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_marginTop="50dp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent" android:onClick="btnClick"/` <Button android:id="@+id/btn_onclick2" android:text="Update" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="100dp" android:layout_marginTop="50dp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent" android:onClick="btnClick"/> <Button android:id="@+id/btn_onclick3" android:text="Delete" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="190dp" android:layout_marginTop="50dp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent" android:onClick="btnClick"/> <Button android:id="@+id/btn_onclick4" android:text="Clear" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="280dp" android:layout_marginTop="50dp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent" android:onClick="btnClick"/> <TextView android:id="@+id/tvList" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="SharedPreferences Test" android:layout_marginTop="100dp" android:textSize="25dp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> </android.support.constraint.ConstraintLayout>
3.2 MainActivity.java
package copycoding.android.app.sharedprefer; import android.content.SharedPreferences; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.TextView; import java.util.Map; public class MainActivity extends AppCompatActivity { static private String SHARE_NAME = "SHARE_PREF"; static SharedPreferences sharePref = null; static SharedPreferences.Editor editor = null; TextView tvList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tvList = (TextView)findViewById(R.id.tvList); sharePref = getSharedPreferences(SHARE_NAME, MODE_PRIVATE); editor = sharePref.edit(); } public void btnClick(View view) { if(view.getId() == R.id.btn_onclick1) { // Buttoon의 ID를 찾아서 실행이 된다. saveData(); } else if(view.getId() == R.id.btn_onclick2) { updateData(); } else if(view.getId() == R.id.btn_onclick3) { deleteData(); } else if(view.getId() == R.id.btn_onclick4) { editor.clear(); editor.commit(); } listData(); } public void saveData() { editor.putBoolean("isShare", true); editor.putFloat("fRate", 1.33f); editor.putInt("nValue", 100); editor.putString("name", "copycoding"); editor.apply(); } public void updateData() { editor.putBoolean("isShare", false); editor.putFloat("fRate", 3.33f); editor.putInt("nValue", 5000); editor.putString("name", "copycoding.tistory"); editor.apply(); } public void deleteData() { editor.remove("nValue"); editor.commit(); } public void listData() { String dataList = ""; Map<String, ?> totalValue = sharePref.getAll(); for(Map.Entry<String, ?> entry : totalValue.entrySet()) { dataList += entry.getKey().toString()+ ": " + entry.getValue().toString() + "\r\n"; Log.d("share : ", entry.getKey() + ": " + entry.getValue()); } tvList.setText(dataList); } }
4. 결과
각각의 버튼에 대한 화면 입니다.
버튼을 클릭하면 기능을 수행하고 바로 결과에 대한 리스트를 출력합니다.
5. APK
다운받아 테스트를 해봅니다.
- copy coding -
'Android' 카테고리의 다른 글
[Android] 안드로이드 RotateAnimation 함수 이용 이미지 회전 (0) | 2019.02.21 |
---|---|
[안드로이드] Google Map에 현재 위치 표시하기(Google 제공 소스) (11) | 2019.01.27 |
[안드로이드] 안드로이드 스튜드오 프로젝트를 github에 업로드 하기 (2) | 2019.01.18 |
[안드로이드] github에있는 프로젝트 안드로이드 스튜디오로 힘들게 checkout 하기 (2) | 2019.01.16 |
[안드로이드] 위치변동을 이용한 걸음 감지 (TYPE_STEP_DETECTOR, GPS_PROVIDER) (2) | 2018.12.22 |