Java PreferenceManager没有';t更改偏好选择的值
我正在制作一个应用程序,它使用一个首选项,允许用户选择是否只想使用Wifi进行数据传输。我遵循了文档 但是有些说明被否决了,所以我不得不临时修改。有一件事仍然是这个例子的一部分,那就是Java PreferenceManager没有';t更改偏好选择的值,java,android,sharedpreferences,Java,Android,Sharedpreferences,我正在制作一个应用程序,它使用一个首选项,允许用户选择是否只想使用Wifi进行数据传输。我遵循了文档 但是有些说明被否决了,所以我不得不临时修改。有一件事仍然是这个例子的一部分,那就是 SharedReferences SharedReferences=PreferenceManager.GetDefaultSharedReferences(此); sPref=sharedPrefs.getString(PREF_NETWORK_TYPE,“First”) 它应该默认为手机的默认网络设置,直到用
SharedReferences SharedReferences=PreferenceManager.GetDefaultSharedReferences(此);
sPref=sharedPrefs.getString(PREF_NETWORK_TYPE,“First”)代码>
它应该默认为手机的默认网络设置,直到用户更改它们,或者在我的情况下,我选择了“any”选项作为默认设置,但它不会保存更改
我不懂一些东西,在网上也找不到直截了当的答案。我在代码中遗漏了什么
公共类设置活动扩展了AppCompatingActivity{
static final String TAG = "SettingsActivity";
public static final String WIFI = "WiFi";
public static final String FIRST = "First";
public static final String SHARED_PREFS = "sharedPrefs";
public static final String WIFI_CONNECTION = "WiFi";
public static final String CELLULAR_CONNECTION = "Cellular";
public static final String WIFI_PREFERENCE = "WiFi Enabled";
public static final String NO_PREFERENCE = "First Enabled";
public static final String NO_CONNECTION = "No Connection";
public static final String PREF_NETWORK_TYPE = "network_choice";
public static String sPref = null;
private NetworkCheck networkCheck = new NetworkCheck();
private static boolean prefWifi = false;
private static boolean noPreferredNetwork = true;
private static boolean wifiConnected = false;
private static boolean cellularConnected = false;
public static boolean networkConnected = true;
//TODO: Figure out what this needs and implement it. How do I fix the settings menu?
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.settings_activity);
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.settings, new SettingsFragment())
.commit();
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
}
PreferenceManager.setDefaultValues(this, R.xml.root_preferences, false);
IntentFilter filter = new IntentFilter(CONNECTIVITY_SERVICE);
networkCheck = new NetworkCheck();
this.registerReceiver(networkCheck, filter);
}
@Override
public void onDestroy() {
super.onDestroy();
if (networkCheck != null) {
this.unregisterReceiver(networkCheck);
}
}
@Override
protected void onResume() {
super.onResume();
Toast.makeText(this, prefWifi + " " + noPreferredNetwork, Toast.LENGTH_LONG).show();
}
@Override
public void onStart() {
super.onStart();
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
sPref = sharedPrefs.getString(PREF_NETWORK_TYPE, "First");
Toast.makeText(this, prefWifi + " " + noPreferredNetwork, Toast.LENGTH_LONG).show();
//checkNetworkFlags(this);
networkType();
}
public void networkType() {
SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREFS, MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean(WIFI_PREFERENCE, prefWifi);
editor.putBoolean(NO_PREFERENCE, noPreferredNetwork);
editor.putBoolean(NO_CONNECTION, networkConnected);
editor.apply();
}
public static class SettingsFragment extends PreferenceFragmentCompat implements SharedPreferences.OnSharedPreferenceChangeListener {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.root_preferences, rootKey);
}
@Override
public void onResume() {
super.onResume();
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onPause() {
super.onPause();
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (key.equals(PREF_NETWORK_TYPE)) {
prefWifi = WIFI.equals(sPref);
noPreferredNetwork = FIRST.equals(sPref);
}
}
}
}
编辑完共享首选项中的数据后,您需要调用属性。完成后提交,否则它不会保存日期,我希望这可以帮助您:D保存数据或将数据放置到与读取或获取数据不同的共享首选项
SharedPreferences SharedPreferences=getSharedPreferences(共享优先,模式专用)
不同于
SharedPreferences SharedPrefers=PreferenceManager.getDefaultSharedPreferences(此)
选择on以在整个活动或应用程序中使用我不能使用两个实例?我已将其固定为mkae呼叫的一个实例,但这仍然无法解决问题。sPref在使用过程中不会更改其值。当我将设置从任何网络更改为wifi时,没有任何更改。应用和提交的工作基本相同。它仍然有效无法解释变量sPrefs
为何不变。