Android의 PreferenceActivity에서 SharedPreference를 가져 오려면 어떻게합니까?
PreferenceActivity를 사용하여 응용 프로그램의 일부 설정을 표시하고 있습니다. onCreate (및 완전한 클래스 메서드)가 다음과 같이 보이도록 xml 파일을 통해 설정을 팽창시킵니다.
public class FooActivity extends PreferenceActivity {
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
addPreferencesFromResource(R.xml.preference);
}
}
의 javadoc는 PreferenceActivity를 PreferenceFragment는 것을 말한다
이러한 환경 설정은 사용자가 상호 작용할 때 SharedPreferences에 자동으로 저장됩니다. 이 활동의 환경 설정 계층이 사용할 SharedPreferences 인스턴스를 검색하려면이 활동과 동일한 패키지의 컨텍스트로 getDefaultSharedPreferences (android.content.Context)를 호출하십시오.
그러나 다른 활동에서 SharedPreference의 이름을 어떻게 얻습니까? 나는 전화 만 할 수있다
getSharedPreferences(name, mode)
다른 활동에서 PreferenceActivity에서 사용한 SharedPreference의 이름이 필요합니다. 이름은 무엇입니까? 어떻게 검색 할 수 있습니까?
import android.preference.PreferenceManager;
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
// then you use
prefs.getBoolean("keystring", true);
최신 정보
에 따르면 공유 환경 설정 | Sai Geetha MN의 Android 개발자 튜토리얼 (13 부) ,
많은 애플리케이션이 특정 애플리케이션 또는 활동의 설정에서 사용자 환경 설정을 캡처하는 방법을 제공 할 수 있습니다. 이를 지원하기 위해 Android는 간단한 API 세트를 제공합니다.
환경 설정은 일반적으로 이름 값 쌍입니다. 응용 프로그램의 다양한 활동에서 "공유 환경 설정"으로 저장할 수 있습니다 (현재 프로세스간에 공유 할 수는 없습니다). 또는 활동별로 저장해야 할 수도 있습니다.
공유 기본 설정 : 공유 기본 설정은 응용 프로그램의 모든 구성 요소 (활동, 서비스 등)에서 사용할 수 있습니다.
활동 처리 환경 설정 : 이러한 환경 설정은 특정 활동 내에서만 사용할 수 있으며 응용 프로그램의 다른 구성 요소에서는 사용할 수 없습니다.
공유 환경 설정 :
공유 환경 설정은 클래스 의 getSharedPreferences
메소드를 사용하여 관리됩니다 Context
. 기본 설정은 기본 파일 (1)에 저장 되거나 기본 설정을 참조하는 데 사용할 파일 이름 (2) 을 지정할 수 있습니다 .
(1) 권장되는 방법 은 파일 이름을 지정하지 않고 기본 모드에서 사용하는 것입니다
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
(2) 파일 이름을 지정할 때 인스턴스를 얻는 방법은 다음과 같습니다.
public static final String PREF_FILE_NAME = "PrefFile";
SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE);
MODE_PRIVATE
기본 설정의 작동 모드입니다. 기본 모드이며 생성 된 파일이 호출 응용 프로그램에서만 액세스됨을 의미합니다. 지원되는 다른 두 가지 모드는 MODE_WORLD_READABLE
및 MODE_WORLD_WRITEABLE
입니다. MODE_WORLD_READABLE
다른 응용 프로그램 에서는 작성된 파일을 읽을 수는 있지만 수정할 수는 없습니다. MODE_WORLD_WRITEABLE
다른 응용 프로그램의 경우 에도 작성된 파일에 대한 쓰기 권한이 있습니다.
마지막으로 환경 설정 인스턴스가 있으면 환경 설정에서 저장된 값 을 검색하는 방법은 다음과 같습니다.
int storedPreference = preferences.getInt("storedInt", 0);
환경 설정 파일에 값 을 저장 하려면 SharedPreference.Editor
오브젝트를 사용해야합니다. 클래스 Editor
에서 중첩 된 인터페이스입니다 SharedPreference
.
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();
편집기는 파일에서 환경 설정 값 remove()
과 같은 및 clear()
삭제 방법도 지원 합니다.
활동 환경 설정 :
공유 기본 설정은 다른 응용 프로그램 구성 요소에서 사용할 수 있습니다. 그러나 다른 구성 요소와 환경 설정을 공유 할 필요가없고 활동 개인 환경 설정을 원하는 경우 활동 getPreferences()
방법 을 사용하여이를 수행 할 수 있습니다 . 이 getPreference
메소드는 getSharedPreferences()
환경 설정 파일 이름에 대한 활동 클래스 이름과 함께 메소드를 사용합니다 .
다음은 환경 설정을 얻는 코드입니다
SharedPreferences preferences = getPreferences(MODE_PRIVATE);
int storedPreference = preferences.getInt("storedInt", 0);
값을 저장하는 코드는 공유 환경 설정의 경우와 동일합니다.
SharedPreferences preferences = getPreference(MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();
데이터베이스에 활동 상태 저장과 같은 다른 방법을 사용할 수도 있습니다. 참고 Android에는이라는 패키지도 포함되어 있습니다 android.preference
. 패키지는 애플리케이션 환경 설정 UI를 구현하기위한 클래스를 정의합니다.
더 많은 예제를 보려면 개발자 사이트에서 Android의 데이터 스토리지 게시물을 확인 하십시오.
에 액세스 getDefaultSharedPreferenes()
할 수없는 경우 getSharedPreferences(name, mode)
대신 사용할 수 있으며 올바른 이름 만 전달하면됩니다.
Android는이 이름을 생성합니다 (프로젝트의 패키지 이름을 기반으로 할 수 있습니까?). 당신은 다음 코드를 넣어 그것을 얻을 수 SettingsActivity
onCreate()
, 무엇을보고 preferencesName
있다.
String preferencesName = this.getPreferenceManager().getSharedPreferencesName();
문자열은 다음과 같아야 com.example.projectname_preferences
합니다. 프로젝트 어딘가에 하드 코드를 전달하고 전달하면 getSharedPreferences()
좋을 것입니다.
이 방법들을 먼저 선언하십시오 ..
public static void putPref(String key, String value, Context context) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = prefs.edit();
editor.putString(key, value);
editor.commit();
}
public static String getPref(String key, Context context) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
return preferences.getString(key, null);
}
그런 다음 준비를 할 때 이것을 호출하십시오.
putPref("myKey", "mystring", getApplicationContext());
준비를 원할 때 이것을 호출하십시오.
getPref("myKey", getApplicationContext());
또는 이 객체 https://github.com/kcochibili/TinyDB--Android-Shared-Preferences-Turbo 를 사용하여 모든 것을 더욱 단순화 할 수 있습니다
예:
TinyDB tinydb = new TinyDB(context);
tinydb.putInt("clickCount", 2);
tinydb.putFloat("xPoint", 3.6f);
tinydb.putLong("userCount", 39832L);
tinydb.putString("userName", "john");
tinydb.putBoolean("isUserMale", true);
tinydb.putList("MyUsers", mUsersArray);
tinydb.putImagePNG("DropBox/WorkImages", "MeAtlunch.png", lunchBitmap);
모든 곳에서 컨텍스트를 전달해야한다는 것은 정말 성가신 일입니다. 코드가 너무 장황하고 관리가 불가능 해집니다. 대신 모든 프로젝트 에서이 작업을 수행합니다 ...
public class global {
public static Activity globalContext = null;
메인 액티비티에서 설정
@Override
public void onCreate(Bundle savedInstanceState) {
Thread.setDefaultUncaughtExceptionHandler(new CustomExceptionHandler(
global.sdcardPath,
""));
super.onCreate(savedInstanceState);
//Start
//Debug.startMethodTracing("appname.Trace1");
global.globalContext = this;
또한 모든 환경 설정 키는 언어 독립적이어야합니다. 아무도 언급하지 않은 충격입니다.
getText(R.string.yourPrefKeyName).toString()
이제 한 줄의 코드에서 이와 같이 아주 간단하게 호출하십시오.
global.globalContext.getSharedPreferences(global.APPNAME_PREF, global.MODE_PRIVATE).getBoolean("isMetric", true);
확인란이 있고 자바 파일에서 값을 가져 오려면 true / false입니다.
사용하다--
Context mContext;
boolean checkFlag;
checkFlag=PreferenceManager.getDefaultSharedPreferences(mContext).getBoolean(KEY,DEFAULT_VALUE);`
2019 업데이트
당신은 단순히 PowerPreference
라이브러리 를 사용할 수 있습니다
https://github.com/AliEsaAssadi/Android-Power-Preference
공유 환경 설정 인스턴스 가져 오기
기본 인스턴스를 얻으려면 전화해야합니다.
PowerPreference.getDefaultFile()
또는 특정 환경 설정 파일을 원하는 경우
PowerPreference.getFileByName(fileName)
데이터 쓰기 :
PowerPreference.getDefaultFile().put(key,value)
데이터 얻기
PowerPreference.getDefaultFile().getString(key,value)
'Programing' 카테고리의 다른 글
Java의 메소드 매개 변수에 키워드 "final"을 사용해야하는 이유는 무엇입니까? (0) | 2020.02.28 |
---|---|
참조 및 값별 자바 스크립트 (0) | 2020.02.28 |
NSOrderedSet 생성 접근 자에서 예외가 발생했습니다. (0) | 2020.02.28 |
Gulp에 플래그를 전달하여 다른 방식으로 작업을 실행할 수 있습니까? (0) | 2020.02.28 |
Ruby on Rails ActiveRecord 마이그레이션에서 너무 긴 색인 이름을 어떻게 처리합니까? (0) | 2020.02.28 |