Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java PreferenceManager没有';t更改偏好选择的值_Java_Android_Sharedpreferences - Fatal编程技术网

Java PreferenceManager没有';t更改偏好选择的值

Java PreferenceManager没有';t更改偏好选择的值,java,android,sharedpreferences,Java,Android,Sharedpreferences,我正在制作一个应用程序,它使用一个首选项,允许用户选择是否只想使用Wifi进行数据传输。我遵循了文档 但是有些说明被否决了,所以我不得不临时修改。有一件事仍然是这个例子的一部分,那就是 SharedReferences SharedReferences=PreferenceManager.GetDefaultSharedReferences(此); sPref=sharedPrefs.getString(PREF_NETWORK_TYPE,“First”) 它应该默认为手机的默认网络设置,直到用

我正在制作一个应用程序,它使用一个首选项,允许用户选择是否只想使用Wifi进行数据传输。我遵循了文档 但是有些说明被否决了,所以我不得不临时修改。有一件事仍然是这个例子的一部分,那就是
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
为何不变。