City At Night

[Android Studio] SharedPreferences로 간단한 데이터 저장하기! 본문

Android Studio

[Android Studio] SharedPreferences로 간단한 데이터 저장하기!

Wuny 2021. 1. 24. 17:01
728x90
반응형

Shared Preferences객체는 키-값 쌍이 포함된 파일을 가리키며 키-값 쌍을 읽고 쓸 수 있는 간단한 메서드를 제공합니다. 

간단한 데이터를 저장할때 사용합니다.

키-값 쌍으로 이루어져 있기때문에 JSON API를 받아올때 바로 저장할 수 있는 장점?도 있죠.

 

여름숲님의 블로그 포스터를 기반으로 작성하였습니다.

https://re-build.tistory.com/37

 

[Android] SharedPreferences 사용하기

이래저래 바쁘다는 핑계로 미루다가 오랜만에 포스팅을 하게 되었습니다. 벌써 새해가 밝았네요. 저만 시간이 빨리 가는 것처럼 느껴지는 건 아니겠죠? 모두 새해에는 좋은 일이 생겼으면 좋겠

re-build.tistory.com

 

너무 설명이 잘 되어 있어 제가 더 쉽게 설명할 수 가 없...

그래서 저는  사용자의 입력을 받아  그 값을 저장하는걸로 커스텀 하였습니다.

우선 코드 리뷰 갑니다.

 

  <PreferenceManager.java>

import android.content.Context;
import android.content.SharedPreferences;

public class PreferenceManager {
    public static final String PREFERENCES_NAME = "rebuild_preference";



    private static final String DEFAULT_VALUE_STRING = "";

    private static final boolean DEFAULT_VALUE_BOOLEAN = false;

    private static final int DEFAULT_VALUE_INT = -1;

    private static final long DEFAULT_VALUE_LONG = -1L;

    private static final float DEFAULT_VALUE_FLOAT = -1F;



    private static SharedPreferences getPreferences(Context context) {

        return context.getSharedPreferences(PREFERENCES_NAME, Context.MODE_PRIVATE);

    }



    /**

     * String 값 저장

     * @param context

     * @param key

     * @param value

     */

    public static void setString(Context context, String key, String value) {

        SharedPreferences prefs = getPreferences(context);

        SharedPreferences.Editor editor = prefs.edit();

        editor.putString(key, value);

        editor.apply();

    }



    /**

     * boolean 값 저장

     * @param context

     * @param key

     * @param value

     */

    public static void setBoolean(Context context, String key, boolean value) {

        SharedPreferences prefs = getPreferences(context);

        SharedPreferences.Editor editor = prefs.edit();

        editor.putBoolean(key, value);

        editor.apply();

    }



    /**

     * int 값 저장

     * @param context

     * @param key

     * @param value

     */

    public static void setInt(Context context, String key, int value) {

        SharedPreferences prefs = getPreferences(context);

        SharedPreferences.Editor editor = prefs.edit();

        editor.putInt(key, value);

        editor.apply();

    }



    /**

     * long 값 저장

     * @param context

     * @param key

     * @param value

     */

    public static void setLong(Context context, String key, long value) {

        SharedPreferences prefs = getPreferences(context);

        SharedPreferences.Editor editor = prefs.edit();

        editor.putLong(key, value);

        editor.apply();

    }



    /**

     * float 값 저장

     * @param context

     * @param key

     * @param value

     */

    public static void setFloat(Context context, String key, float value) {

        SharedPreferences prefs = getPreferences(context);

        SharedPreferences.Editor editor = prefs.edit();

        editor.putFloat(key, value);

        editor.apply();

    }



    /**

     * String 값 로드

     * @param context

     * @param key

     * @return

     */

    public static String getString(Context context, String key) {

        SharedPreferences prefs = getPreferences(context);

        String value = prefs.getString(key, DEFAULT_VALUE_STRING);

        return value;

    }



    /**

     * boolean 값 로드

     * @param context

     * @param key

     * @return

     */

    public static boolean getBoolean(Context context, String key) {

        SharedPreferences prefs = getPreferences(context);

        boolean value = prefs.getBoolean(key, DEFAULT_VALUE_BOOLEAN);

        return value;

    }



    /**

     * int 값 로드

     * @param context

     * @param key

     * @return

     */

    public static int getInt(Context context, String key) {

        SharedPreferences prefs = getPreferences(context);

        int value = prefs.getInt(key, DEFAULT_VALUE_INT);

        return value;

    }



    /**

     * long 값 로드

     * @param context

     * @param key

     * @return

     */

    public static long getLong(Context context, String key) {

        SharedPreferences prefs = getPreferences(context);

        long value = prefs.getLong(key, DEFAULT_VALUE_LONG);

        return value;

    }



    /**

     * float 값 로드

     * @param context

     * @param key

     * @return

     */

    public static float getFloat(Context context, String key) {

        SharedPreferences prefs = getPreferences(context);

        float value = prefs.getFloat(key, DEFAULT_VALUE_FLOAT);

        return value;

    }



    /**

     * 키 값 삭제

     * @param context

     * @param key

     */

    public static void removeKey(Context context, String key) {

        SharedPreferences prefs = getPreferences(context);

        SharedPreferences.Editor edit = prefs.edit();

        edit.remove(key);

        edit.apply();

    }



    /**

     * 모든 저장 데이터 삭제

     * @param context

     */

    public static void clear(Context context) {

        SharedPreferences prefs = getPreferences(context);

        SharedPreferences.Editor edit = prefs.edit();

        edit.clear();

        edit.apply();

    }

}

추가로 commit() 대신 apply()를 사용하라 권고 하고 있어서 apply()로 다 바꾸었습니다.(공식문서였나..? 생각이 가물가물..)

 

  <MainActivity.java>

public class MainActivity extends AppCompatActivity {
    private Context mcontext;
    private TextView textView;
    private EditText editText;

    private String text;
    private String contents;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        editText = findViewById(R.id.editText);
        textView = findViewById(R.id.textView);

        mcontext=this;

        text = PreferenceManager.getString(mcontext,"Key2");
        textView.setText(text);
    }

    public void btnOnclick(View view) {
        switch (view.getId()){
            case (R.id.button):
                contents = editText.getText().toString();
                PreferenceManager.setString(mcontext,"Key2",contents);
                break;
        }
    }
}

 

코드 에러가 없는데 자꾸 값이 안넘어와서 몇십분 씨름한 결과... 

key값의 K를 윗 줄에는 대문자로 썼고 아래 버튼 함수에는 소문자로 썼다는...

값을 입력하고 추가 버튼을 누른후 다시 앱을 들어가면 key값으로 넣은 데이터가 잘 들어간걸 확인 할 수 있습니다.

728x90
반응형
Comments