如何永久存储我的应用程序的值?

时间:2014-03-18 02:47:38

标签: android

我有一个应用程序,我需要存储一些数据,目前我以这种方式存储它:

@Override
protected void onDestroy() {
    super.onDestroy();
    editor = preferences.edit();
    editor.putInt("DigitButtonStyle",button1);
    editor.putInt("MemoryButtonStyle", buttonmadd);
    editor.putInt("FunctionButtonStyle", buttoncos);
    editor.putString("InputTextValue",inputText.getText().toString());
    editor.commit();
}

@Override
protected void onPause() {
    super.onPause();
    editor = preferences.edit();
    editor.putInt("DigitButtonStyle",button1);
    editor.putInt("MemoryButtonStyle", buttonmadd);
    editor.putInt("FunctionButtonStyle", buttoncos);
    editor.putString("InputTextValue",inputText.getText().toString());
    editor.commit();
}

存储数据,如果我的活动移至背景或屏幕方向发生变化,则会恢复其状态。但是,如果我按下设备上的中间按钮以查看所有正在运行的后台应用程序并将其从那里删除它不会恢复数据。我该怎么办?

这是我用来将数据写入我的首选项的代码:

switch (item.getItemId())
    { 
      case R.id.blue:
          for (Button currentButton : buttons) {
                currentButton.setBackgroundResource(R.drawable.blue);
                button1 = buttoncos = buttonmadd = R.drawable.blue;
            };
            editor.putInt("DigitButtonStyle",button1);
            editor.putInt("MemoryButtonStyle", buttonmadd);
            editor.putInt("FunctionButtonStyle", buttoncos);
                        editor.commit();
          return true;

但它不起作用。

以下是我的onCreate代码的一部分:

public class MainActivity extends ActionBarActivity 
{

private TextView inputText,resultText,memoryStatText;
public static int button1,buttoncos,buttonmadd;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ThemeChanger.onActivityCreateSetTheme(this);
    setContentView(R.layout.main);

    preferences = PreferenceManager.getDefaultSharedPreferences(this);


for (Button currentButton : digitbuttons) {
        currentButton.setBackgroundResource(button1);
    }
  for (Button currentButton : memoryfunctions) {
        currentButton.setBackgroundResource(buttonmadd);
    }
  for (Button currentButton : functionbuttons) {
        currentButton.setBackgroundResource(buttoncos);
    }

4 个答案:

答案 0 :(得分:0)

因为当你自己杀死你的app时,Android OS不会触发你的onDestroy方法,因此你需要在创建时保存记录,而不是onDestroy方法。

你的生命周期方法还可以,但是如果你删除了告诉Android操作系统杀死你的进程的任务,就不会触发存储过程。所以你需要在生成记录时存储它们。 您的代码已丢失提交步骤:

switch (item.getItemId())
{ 
  case R.id.blue:
      for (Button currentButton : buttons) {
            currentButton.setBackgroundResource(R.drawable.blue);
            button1 = buttoncos = buttonmadd = R.drawable.blue;
        };
        editor.putInt("DigitButtonStyle",button1);
        editor.putInt("MemoryButtonStyle", buttonmadd);
        editor.putInt("FunctionButtonStyle", buttoncos);
        editor.commit();
      return true;

onCreate方法中,您应该检查之前是否存储过引用的颜色。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ThemeChanger.onActivityCreateSetTheme(this);
    setContentView(R.layout.main);
    int defaultValue = R.drawable.blue;
    preferences = PreferenceManager.getDefaultSharedPreferences(this);
    button1 = preferences.getInt("DigitButtonStyle",defaultValue);
    buttonmadd = preferences.getInt("MemoryButtonStyle",defaultValue);
    buttoncos = preferences.getInt("FunctionButtonStyle",defaultValue);
    for (Button currentButton : digitbuttons) {
        currentButton.setBackgroundResource(button1);
    }
    for (Button currentButton : memoryfunctions) {
        currentButton.setBackgroundResource(buttonmadd);
    }
    for (Button currentButton : functionbuttons) {
        currentButton.setBackgroundResource(buttoncos);
    }

答案 1 :(得分:0)

拥有冗余但仍然无法完成任务的好习惯尝试将相同的代码放在onResume()中,这将在应用程序恢复期间触发。 资料来源:Activity Life Cycle 但是你应该在自然生命周期的流程中编写你的程序以获得最佳实践。并非所有用户都会像您一样中断应用程序。我想。

答案 2 :(得分:0)

一旦用户触发某些操作,您应始终存储您认为必不可少的数据。

不要等待应用程序暂停或终止。只要用户提供输入或者触发某些操作,就可以保存数据。这将是最好的

答案 3 :(得分:0)

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ThemeChanger.onActivityCreateSetTheme(this);
    setContentView(R.layout.main);

    preferences = PreferenceManager.getDefaultSharedPreferences(this);
    button1 = preferences.getInt("DigitButtonStyle", 0);
    for (Button currentButton : digitbuttons) {
        currentButton.setBackgroundResource(button1);
    }
    buttonmadd = preferences.getInt("MemoryButtonStyle", 0);
    for (Button currentButton : memoryfunctions) {
        currentButton.setBackgroundResource(buttonmadd);
    }
    buttoncos = preferences.getInt("FunctionButtonStyle", 0);
    for (Button currentButton : functionbuttons) {
        currentButton.setBackgroundResource(buttoncos);
    }

...
}