如果应用程序被杀死或销毁,如何使用共享首选项来保存计算数据?

时间:2014-01-08 18:18:16

标签: android sharedpreferences

我正在使用一个带有实现OnClickListener

的Activity

然后我有:

    @Override
protected void onCreate(Bundle savedInstanceState) {
    /** Remove title bar */
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    Utils.onActivityCreateSetTheme(this);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    /** Themes */
    findViewById(R.id.buttonRED).setOnClickListener(this);
    findViewById(R.id.buttonGREEN).setOnClickListener(this);
    findViewById(R.id.buttonBlue).setOnClickListener(this);
    /** Hide Auto Keyboard */
    getWindow().setSoftInputMode(
            WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
    /** The rest of codes*/
    InputPrice = (TextView) findViewById(R.id.ePrice);

我有大约15个按钮,6个TextView和1个SeekBar以及一些动画。

然后我的onClick有一些计算

            public void onClick(View v) {
            try {
                double price = Double.parseDouble(ePrice.getText()
                        .toString());
                double percent = Double.parseDouble(ePercent.getText()
                        .toString());

                double priceValue = price * percent / 100.0f;
                double percentValue = price - priceValue;

                moneyToGet.setText(String.valueOf(priceValue));
                moneyToPay.setText(String.valueOf(percentValue));

                moneyToGet.setText(String.format("%.02f", priceValue));
                moneyToPay.setText(String.format("%.02f", percentValue));

                // catch
            } catch (NumberFormatException ex) {
                // write a message to users
                moneyToGet.setText("");
            }
        }

我想要什么,为什么需要共享偏好设置?

我想在手机中保存我的应用程序的计算和动画数据。因此,即使应用程序被杀死或被破坏,用户也可以获得它们。

我从Android开发人员那里了解到,使用共享首选项的最佳方式是on on on on on on on on is is is is but but but but but but but but but but but but but but but but 我做了一些研究,我下载了一些样本,但没有帮助。

我会感激任何帮助

3 个答案:

答案 0 :(得分:0)

SharedPreferences是保存原始数据的好方法。

您可以按照以下方式使用它:

@Override
protected void onPause(){ //save data in onPause

    SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
    SharedPreferences.Editor editor = settings.edit();
    editor.putInt("price", priceValue);
    editor.putInt("percent", percentValue);
    editor.commit();
}

@Override
protected void onCreate(){ //load data in onPause

    SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
    priceValue = settings.getInt("price",0);
    percentValue = settings.getInt("percent",0);
}

即使应用被杀死或被破坏,数据也会保存在SharedPreferences中。只有时间SharedPreferences消失才能卸载应用程序或清除数据。

答案 1 :(得分:0)

您说要在单击组件后保存计算,这样您应该在您正在使用的onClick()内调用方法。 使用sharedPreferences非常简单,这里有一些示例代码:

public void saveInternetStatusLight(String color){
        SharedPreferences sharedPreferences = getSharedPreferences();     //constructor of SharedPreferences
        SharedPreferences.Editor editor = sharedPreferences.edit(); // constructor of editor for writing
        editor.putString("InternetLight", color); //writing a String with "InternetLight" TAG with the value "color"
        editor.commit(); //commit the saved data
    }       
public String loadInternetStatusLight() {
            SharedPreferences sharedPreferences = getSharedPreferences(); //constructor sharedpreferences
            return sharedPreferences.getString("InternetLight", "red"); //reading a String with "InternetLigth" TAG with the value, if it's not found it returns the value "red"
        }

如果你想分离组件的情况,你也应该在onClick中使用Switch()。

Swith(v.getId())
{
case(R.id.buttonRED)
 { 
 }
               //etc
}

答案 2 :(得分:0)

首先,您需要了解这些方法,因为它们是Activity Lifecycle的重要组成部分。其次,示例here为如何打开和关闭SharedPreferencesonCreateonStop)提供了极好的参考。它还显示了如何在onCreate中恢复这些已保存的值:

public class Calc extends Activity {
    public static final String PREFS_NAME = "MyPrefsFile";

    @Override
    protected void onCreate(Bundle state){
       super.onCreate(state);
       . . .

       // Restore preferences
       SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
       boolean silent = settings.getBoolean("silentMode", false);
       setSilent(silent);
    }

    @Override
    protected void onStop(){
       super.onStop();

      // We need an Editor object to make preference changes.
      // All objects are from android.context.Context
      SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
      SharedPreferences.Editor editor = settings.edit();
      editor.putBoolean("silentMode", mSilentMode);

      // Commit the edits!
      editor.commit();
    }
}

在您的示例中,您需要在onClick代码的末尾添加以下内容:

SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
settings.edit().putInt("price", priceValue).putInt("percent", percentValue).commit();

然后在上面的例子中替换这些行:

// Restore preferences
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
boolean silent = settings.getBoolean("silentMode", false);
setSilent(silent);

使用:

// Restore preferences
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
int priceValue = settings.getInt("price", 0);
int percentValue = settings.getInt("percent", 0);
moneyToGet.setText(String.format("%.02f", priceValue));
moneyToPay.setText(String.format("%.02f", percentValue));

此外,对于您的问题,您根本不需要覆盖onStop方法。