SharedPreferences не сохраняются в приложении для Android

У меня есть IntroActivity, где я сохраняю значение, сохраненное из EditText, в общей преф.

В моем SettingsActivity я пытаюсь отредактировать это значение, но даже когда я вызываю значение общих настроек с помощью только что отредактированного ключа, оно все равно показывает старое значение. Что я делаю не так?

Вот IntroActivity

public class IntroActivity extends Activity {

    String PREF = "MyPrefs";
    Button mDone;
    EditText mTemperature;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_intro);

        mDone = (Button) findViewById(R.id.done);
        mTemperature = (EditText) findViewById(R.id.temperature);

        mDone.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int temperature = Integer.parseInt(mTemperature.getText().toString());
                SharedPreferences preferences = getSharedPreferences(PREF, Context.MODE_PRIVATE);
                SharedPreferences.Editor edit = preferences.edit();
                edit.putInt("sweater", temperature);
                edit.commit();

                Intent intent = new Intent(IntroActivity.this, MainActivity.class);
                startActivity(intent);
            }
        });
    }
}

Вот SettingsActivity

public class SettingsActivity extends ActionBarActivity {

    Button mDone;
    EditText mTemperature;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_settings);

        mDone = (Button) findViewById(R.id.done);
        mTemperature = (EditText) findViewById(R.id.temperature);

        mDone.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                SharedPreferences preferences = getSharedPreferences("sweater", 0);
                SharedPreferences.Editor edit = preferences.edit();

                int temp = preferences.getInt("sweater", 0);
                int updateSweater = Integer.parseInt(mTemperature.getText().toString());
                edit.remove("sweater");
                edit.putInt("sweater", updateSweater);
                boolean saved = edit.commit();
                preferences.getInt("sweater", 0);

                Toast.makeText(SettingsActivity.this, "Sweater Weather Updated", Toast.LENGTH_SHORT).show();

                Map<String, ?> map = preferences.getAll();
                for(Map.Entry<String,?> entry : map.entrySet()){
                    Log.d("map values",entry.getKey() + ": " +
                            entry.getValue().toString());
                }
                Intent intent = new Intent(SettingsActivity.this, MainActivity.class);
                startActivity(intent);
            }
        });
    }
}

person Rafa    schedule 05.07.2016    source источник


Ответы (3)


Я пытаюсь отредактировать это значение, но даже когда я вызываю значение общих настроек с помощью только что отредактированного ключа, оно по-прежнему показывает старое значение. Что я делаю не так?

Потому что имя SharedPreferences в обоих действиях разное.

В IntroActivity используется MyPrefs, а в SettingsActivity используется sweater.

Используйте одно и то же имя в обоих действиях. чтобы заставить его работать, измените sweater на MyPrefs в SettingsActivity:

SharedPreferences preferences = getSharedPreferences("MyPrefs", 0);
person ρяσѕρєя K    schedule 05.07.2016

Эти две линии различны в обоих действиях

SharedPreferences preferences = getSharedPreferences(PREF, Context.MODE_PRIVATE);

и

SharedPreferences preferences = getSharedPreferences("sweater", 0);

Для этой задачи вам нужно создать два файла pref и прочитать значения из другого файла.

person Vijay Rajput    schedule 05.07.2016

Я верю в вашу активность в настройках, вам нужно использовать SharedPreferences preferences = getSharedPreferences("MyPrefs", 0);

Вместо SharedPreferences preferences = getSharedPreferences("sweater", 0);

Вы сохраняете значение в привилегии «свитер» и загружаете его из «MyPrefs».

person Ashwin Valento    schedule 05.07.2016