Android:关闭应用程序时保存实例状态[重复]

Posted

技术标签:

【中文标题】Android:关闭应用程序时保存实例状态[重复]【英文标题】:Android: Save an instance state when app is closed [duplicate] 【发布时间】:2012-05-24 00:32:23 【问题描述】:

可能重复:How do I save an android application's state?

我是 Java 和 Android 的新手,正在构建一些小项目来学习。我制作了一个资金跟踪应用程序,它允许用户输入值并且它只是继续减去它。一切正常,但我希望在应用程序关闭并重新打开时保存或缓存这些值。 阅读时,我发现也许 OnPause 可以解决问题,但仍然不是 100% 理解它。

谁能推荐如何做到这一点以及如何应用于我的代码?

非常感谢您的帮助!!

package ps.age.sl;


import java.text.NumberFormat;
import java.util.Locale;


import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.TextView;


public class MoneyTrackerActivity extends Activity 
    /** Called when the activity is first created. */
        ImageButton subtract;


        EditText startingmoney,submoney, endmoney, tracker;
        Locale currentLocale = Locale.getDefault();





    @Override
    public void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

     //   startingmoney = (EditText) findViewById (R.id.firstmoney);
      //  submoney = (EditText) findViewById (R.id.submoney);
       // subtract = (ImageButton) findViewById (R.id.subbutton);
       // endmoney = (EditText) findViewById (R.id.endtv);
       // tracker = (EditText) findViewById (R.id.trackertv);

        startingmoney.setText("");
        submoney.setText("");
        endmoney.setText("");

subtract.setOnClickListener(new View.OnClickListener() 
         double currentValue=0;       
         double startValue=0;       
            public void onClick(View v) throws  NumberFormatException 


                    if (v == subtract)
                
                NumberFormat currencyFormatter;
                currencyFormatter = NumberFormat.getCurrencyInstance(currentLocale);



                    String totalString;
                    String x = startingmoney.getText().toString();
                    String y = submoney.getText().toString ();
                            double total;
                        double xm = 0.00;
                        double ym =0.00;

                         try
                          
                              xm = Double.parseDouble(x);
                          
                         catch(NumberFormatException n)
                          
                              xm = 0.00;
                          
                         try
                         
                                 ym = Double.parseDouble(y);
                         
                        catch(NumberFormatException n)
                         
                                ym = 0.00;
                         

                   if(startValue!=xm)
                       startValue=xm;
                       currentValue=xm;
                   

                   currentValue = currentValue -ym;


                    totalString = currencyFormatter.format(currentValue);
                    endmoney.setText(totalString);

                    tracker.setText("you have entered " + totalString +"\n" + tracker.getText().toString());



              
                    
                                        );
    
                

【问题讨论】:

【参考方案1】:

请使用SharedPreferences 将数据存储在私有应用程序存储中。在 onPause 方法中实现SharedPrefernces,如下所示:

 @Override
    protected void onPause() 
    
      super.onPause(); 
      // Store values between instances here
      SharedPreferences preferences = getSharedPreferences("sharedPrefs", 0);
      SharedPreferences.Editor editor = preferences.edit();
      editor.putString("CLASSLABEL", this.getLocalClassName()); // value to store
      editor.putString("STRINGLABEL",String1 );
      editor.putString("STRINGLABEL1",String2);
      // Commit to storage
      editor.commit();
    

【讨论】:

为什么要在 onSaveInstanceState 中使用 SharedPreferences 而不是 Bundle?

以上是关于Android:关闭应用程序时保存实例状态[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Android11.2 通过重写对应的方法保存和恢复实例的状态

保存应用状态

保存游戏状态 Android

Android:需要在自定义适配器列表视图中保存复选框状态

正确处理Android上的Realm实例

在android中刷新整个listview [重复]