안드로이드

[Android] SharedPreferences- 공유 환경설정- 데이터 저장 1편

IT꿈나무 2021. 9. 16. 17:57
반응형

1. 목적:

 간단하게 어플리케이션 내에서 데이터를 저장하여 활용할 필요가 있다.

저장하려는 키-값 컬렉션이 비교적 작은 경우 SharedPreferences API를 사용해야 합니다

 

참고: SharedPreferences API는 키-값 쌍을 읽고 쓰는데 사용되며 앱 설정을 위한 사용자 인터페이스 빌드를 지원하는 Preference API와 혼동해서는 안 됩니다(Preference API도 사용자의 설정을 저장하는 데 SharedPreferences를 사용하긴 함). Preference API에 관한 자세한 내용은 설정 개발자 가이드를 참조하세요.

 

공유 환경설정의 핸들 가져오기

다음 메서드 중 하나를 호출하여 새로운 공유 환경설정 파일을 생성하거나 기존 파일에 액세스할 수 있습니다.

  • getSharedPreferences() — 첫 번째 매개변수로 지정하는 이름으로 식별되는 여러 공유 환경설정 파일이 필요한 경우 이 메서드를 사용합니다. 앱의 모든 Context에서 이 메서드를 호출할 수 있습니다.
  • getPreferences() — 활동에 하나의 공유 환경설정 파일만 사용해야 하는 경우 Activity에서 이 메서드를 사용합니다. 이 메서드는 활동에 속한 기본 공유 환경설정 파일을 검색하기 때문에 이름을 제공할 필요가 없습니다.

SharedPreferences 객체를 획득할 때 지정하는 mode 값은 다음과 같습니다.[2]

  • MODE_PRIVATE: 자기 앱 내에서 사용. 외부 앱에서 접근 불가
  • MODE_WORLD_READABLE: 외부 앱에서 읽기 가능
  • MODE_WORLD_WRITEABLE: 외부 앱에서 쓰기 가능
  • 외부에서 접근이 필요한 경우, 앱에서 비공개 파일을 다른 앱과 공유해야 하면 FLAG_GRANT_READ_URI_PERMISSION과 함께 FileProvider를 사용하면 됩니다. 자세한 내용은 파일 공유를 참조하세요.

 

 

2. 방법:

MySharedPreferences.java

import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;

public class MySharedPreferences {
static String SHARED_APP_KEY="SHARED_APP_KEY"; //앱내의 context에서 접근하기 위한 상위 Key

    public static String getString(Activity act, String key , String defalut){
        SharedPreferences sharedPref = act.getPreferences(Context.MODE_PRIVATE);
        String defaultValue = defalut;
        return sharedPref.getString(key, defaultValue);

    }
    public static Boolean putString(Context act, String key, String value){
        SharedPreferences sharedPref = act.getSharedPreferences(SHARED_APP_KEY,Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPref.edit();
        editor.putString(key, value);
        return editor.commit();
    }
    
//    public static Boolean putString(Activity act, String key, String value){
//        SharedPreferences sharedPref = act.getPreferences(Context.MODE_PRIVATE);
//        SharedPreferences.Editor editor = sharedPref.edit();
//        editor.putString(key, value);
//        return editor.commit();
//    }
    //참고 자료: https://developer.android.com/training/data-storage/shared-preferences?hl=ko
}

MainActivity.java

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;

import com.example.mydatabaseapplication.data.MySharedPreferences;

public class MainActivity extends AppCompatActivity {

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

        String FIRST_KEY="FIRST_KEY";
        Boolean isCommit = MySharedPreferences.putString(this, FIRST_KEY, "myValue");
        Log.i("TAG","isCommit: "+isCommit);

        String resutl = MySharedPreferences.getString(this, FIRST_KEY,"empty");
        Log.i("TAG","resutl: "+ resutl);


    }
}

결과

 

 

 

* 참고자료:

[1]  키-값 데이터 저장, https://developer.android.com/training/data-storage/shared-preferences?hl=ko

[2] 깡쌤의 토마토,  https://kkangsnote.tistory.com/29

 

* 질문?

getSharedPreferences() 와 getPreferences() 의 차이를 잘 모르겠음.

->단순히 context를 사용하느냐, Activity를 사용하느냐의 차이가 있다.

-> getPreferences는 Activity를 사용하기 때문에 해당하는 Activity에서만 데이터를 읽을수 있어, 앱내의 다른 엑티비티에서 데이터를 읽을수 없다.

->앱내의 모든 context에서 데이터를 읽기 위해서는 getSharedPreferences()를 사용해야 한다. 

         act.getSharedPreferences(SHARED_APP_KEY,Context.MODE_PRIVATE); //SHARED_APP_KEY 앱내에서 프리퍼런스를 구분하는 키 값

 

MyDataBaseApplication.zip
0.10MB

반응형