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 앱내에서 프리퍼런스를 구분하는 키 값
'안드로이드' 카테고리의 다른 글
[Android] 안드로이드 스플레시 구현 (0) | 2021.09.23 |
---|---|
[Android] 터미널 빌드 명령어 (0) | 2021.09.23 |
[cordova] Toast plugin 만들기 (0) | 2021.09.15 |
[Android] 액티비티를 다이얼로그 효과 주기 (0) | 2021.08.30 |
[Android] 애니메이션 효과?(회전) 주기 (0) | 2021.07.20 |