В моем приложении есть страница, где пользователь может ввести название продукта и его количество калорий, которое затем удаляется из ежедневного количества калорий, полученного из другого класса.Это прекрасно работает, я хотел сделать так, чтобы он не сбрасывался к исходному значению при каждом открытии страницы (если это не новая установка / ручной сброс с помощью кнопки).
Я сталкивался SharedPreferences
и пытался реализовать это, но в моем методе onResume
всегда используется значение по умолчанию, и я не очень уверен, почему и мне нужна помощь, чтобы выяснить, что я делаю неправильно, и как это исправить, как я будунеобходимо использовать это и в нескольких других классах.
Мой класс:
public class CalorieTracker extends AppCompatActivity {
protected String age, calorieCount;
protected EditText itemName, kCal;
protected TextView remainingCalories;
protected Button submitBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_calorie_tracker);
getSupportActionBar().setDisplayShowHomeEnabled(true);
Bundle extras = getIntent().getExtras();
age = extras.getString("age");
calorieCount = extras.getString("calories");
System.out.println(age + ":" + calorieCount);
itemName = findViewById(R.id.productNameCalorieTracker);
kCal = findViewById(R.id.calorie_kcal);
submitBtn = findViewById(R.id.submit_calorie);
remainingCalories = findViewById(R.id.remainingCalorieCount);
remainingCalories.setText(calorieCount);
submitBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int currentCount = Integer.parseInt(remainingCalories.getText().toString());
int enteredAmount = Integer.parseInt(kCal.getText().toString());
calorieCount = String.valueOf(currentCount - enteredAmount);
remainingCalories.setText(calorieCount);
SharedPreferences mPrefs = getPreferences(MODE_PRIVATE);
SharedPreferences.Editor editor = mPrefs.edit();
editor.putString("sessionCalories",remainingCalories.getText().toString());
editor.commit();
}
});
}
@Override
protected void onResume() {
super.onResume();
SharedPreferences mPrefs = getPreferences(MODE_PRIVATE);
remainingCalories.setText(mPrefs.getString("sessionCalories",""));
}
}
http://prntscr.com/me99dp
Изображение того, как это выглядит при загрузке приложения, дажехотя начальное значение calorieCount
должно быть 2100
, которое я получаю с предыдущей страницы, используя дополнительные функции Bundle.
Если я изменю строку remainingCalories.setText(mPrefs.getString("sessionCalories",""));
в моем методе onResume
, на: remainingCalories.setText(mPrefs.getString("sessionCalories","3"));
затем он показывает 3 изначально.