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
SharedPreference 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 = "";
Map totalValue = 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
다운받아 테스트를 해봅니다.
SharePref.apk
- copy coding -