환경 설정 관리자를 사용하여 일부 정수 및 부울 값을 저장합니다. SettingsPreferences 클래스를 만들었습니다.
public class SettingsPreferences {
private Context mContext;
public SettingsPreferences(Context context) {
this.mContext = context;
}
public boolean isNull() {
if (PreferenceManager.getDefaultSharedPreferences(mContext) == null) {
return true;
} else {
return false;
}
}
public void setBoolean(String name, boolean value) {
PreferenceManager.getDefaultSharedPreferences(mContext).edit()
.putBoolean(name, value).apply();
}
public void setInt(String name, int value) {
PreferenceManager.getDefaultSharedPreferences(mContext).edit()
.putInt(name, value).apply();
}
public boolean getBoolean(String name, boolean defaultValue) {
return PreferenceManager.getDefaultSharedPreferences(mContext)
.getBoolean(name, defaultValue);
}
public int getInt(String name, int defaultValue) {
return PreferenceManager.getDefaultSharedPreferences(mContext).getInt(
name, defaultValue);
}}
Main 클래스의 onCreate 메서드에서 기본값을 추가합니다.
mSettingsPreferences = new SettingsPreferences(getApplicationContext());
if(mSettingsPreferences.isNull() == true) {
mSettingsPreferences.setBoolean("MAX", 1);
mSettingsPreferences.setBoolean("PROGRESS", 1);
}
조각 클래스에서 해당 데이터를로드하고 진행률 표시 줄에 표시해야합니다. 다음은 코드입니다.
Thread t = new Thread() {
public void run() {
try {
sleep(100);
SettingsPreferences sett = new SettingsPreferences(mContext);
mProgBar.setMax(sett.getInt("MAX", 2));
mProgBar.setProgress(sett.getInt("PROGRESS", 1));
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
t.start();
컨텍스트가 정의되어 있으며 진행률 표시 줄도 확인했지만 매번 기본값을로드합니다. 무엇이 문제입니까?
isNull ()은 항상 false를 반환한다고 가정합니다.
PreferenceManager.getDefaultSharedPreferences(mContext)
반환하지 않습니다 null
, 적어도 나는 그런 경우를 본 적이 없다. 이렇게하면 MAX 및 PROGRESS 값을 초기화하지 않고 결국 기본값을 읽습니다.
SharedPreferences.contains 메서드를 사용하여 MAX가 있는지 확인한 다음 초기화하지 않을 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다