Java 在应用程序中保存数据

Java 在应用程序中保存数据,java,android,time,save,sharedpreferences,Java,Android,Time,Save,Sharedpreferences,我已经申请了。这是一个显示你按下它的时间的按钮。每次我“杀死”应用程序时,计时器都会再次从0开始(自然)。我怎样才能让应用程序节省按下按钮的时间,所以当应用程序被关闭,然后你打开它时,计时器就在那时停止了。我有一些关于这是如何做到的,我认为这与SharedReference有关 我的代码: public class MainActivity extends ActionBarActivity { Button button1; Chronometer chromo; p

我已经申请了。这是一个显示你按下它的时间的按钮。每次我“杀死”应用程序时,计时器都会再次从0开始(自然)。我怎样才能让应用程序节省按下按钮的时间,所以当应用程序被关闭,然后你打开它时,计时器就在那时停止了。我有一些关于这是如何做到的,我认为这与SharedReference有关

我的代码:

public class MainActivity extends ActionBarActivity {

    Button button1;
    Chronometer chromo;
    protected long time;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button1=(Button)findViewById(R.id.button1);
        chromo=(Chronometer)findViewById(R.id.chromo);

        button1.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                // TODO Auto-generated method stub
                if(event.getAction() == MotionEvent.ACTION_DOWN){
                    chromo.setBase(SystemClock.elapsedRealtime()+time);
                    chromo.start();
                }
                else if( event.getAction() == MotionEvent.ACTION_UP){
                    time =chromo.getBase()-SystemClock.elapsedRealtime();
                    chromo.stop();
                }
                return true;
            }
    });
}}

设置首选值:

SharedPreferences.Editor editor = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE).edit();
 editor.putString("name", "slama");
 editor.putInt("idName", 28);
 editor.commit();
// MY_PREFS_NAME - a static String variable like: 
//public static final String MY_PREFS_NAME = "MyPrefsFile";
SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE); 
String restoredText = prefs.getString("text", null);
if (restoredText != null) {
  String name = prefs.getString("name", "No name defined");//"No name defined" is the default value. String name = prefs.getString("name", "");
  int idName = prefs.getInt("idName", 0); //0 is the default value.
}
从首选项检索数据:

SharedPreferences.Editor editor = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE).edit();
 editor.putString("name", "slama");
 editor.putInt("idName", 28);
 editor.commit();
// MY_PREFS_NAME - a static String variable like: 
//public static final String MY_PREFS_NAME = "MyPrefsFile";
SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE); 
String restoredText = prefs.getString("text", null);
if (restoredText != null) {
  String name = prefs.getString("name", "No name defined");//"No name defined" is the default value. String name = prefs.getString("name", "");
  int idName = prefs.getInt("idName", 0); //0 is the default value.
}
这是一个Android共享首选项教程:


它可以帮助您解决问题

保存在SharedReferences中:

SharedPreferences prefs= getSharedPreferences("prefs", Context.MODE_PRIVATE);
// We use an editor to insert values in SharedPreferences
Editor editor = prefs.edit(); 
// Saving the values
editor.putLong("myTime", time); 
// Committing the changes
editor.commit(); 
检索保存的值:

long savedValue = 0l;
SharedPreferences prefs= getSharedPreferences("prefs", Context.MODE_PRIVATE);

if (prefs.contains("hello")){
    savedValue = sharedpreferences.getLong("myTime", 0l));
}
编辑:

public class MainActivity extends ActionBarActivity {

    Button button1;
    Chronometer chromo;
    protected long time = 0;
    private SharedPreferences prefs;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button1=(Button)findViewById(R.id.button1);
        chromo=(Chronometer)findViewById(R.id.chromo);
        prefs = getSharedPreferences("prefs", Context.MODE_PRIVATE);
        long savedValue = prefs.getLong("my_chrono", 0);

        if(savedValue == 0)
            chromo.setBase(SystemClock.elapsedRealtime());
        else
            chromo.setBase(SystemClock.elapsedRealtime() + savedValue);

        button1.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                // TODO Auto-generated method stub
                if(event.getAction() == MotionEvent.ACTION_DOWN){
                    chromo.start();
                }
                else if( event.getAction() == MotionEvent.ACTION_UP){
                    time =chromo.getBase()-SystemClock.elapsedRealtime();
                    chromo.stop();
                    prefs.edit().putLong("my_chrono", time).apply();
                }
                return true;
            }
    });
}}
============================================================================

要使用共享首选项,请在onCreate中初始化此选项

SharedPreferences prefs = getSharedPreferences("the_package_of_your_app", Context.MODE_PRIVATE);
然后,尝试获取保存的值

int my_saved_value = prefs.getInt("the_package_of_your_app.my_int_1", 0);
if(my_saved_value != 0)
    //your value of your timer was saved, do what's needed with it
else
    //there was no value saved, or the timer was at 0
现在,您必须在需要时保存该值(当计时器停止或应用程序关闭时)


要详细说明@2Dee的答案:

SharedPreferences prefs= getSharedPreferences("prefs", Context.MODE_PRIVATE);
// We use an editor to insert values in SharedPreferences
Editor editor = prefs.edit(); 
// Saving the values
editor.putLong("myTime", time); 
// Committing the changes
editor.commit(); 
可以进入

protected void onDestroy();
方法。当活动被销毁(杀死、关闭等)时,可以在要调用的活动中重载此方法,以便保存任何数据(这是您想要做的)

同样地

SharedPreferences prefs= getSharedPreferences("prefs", Context.MODE_PRIVATE);
time = sharedpreferences.getLong("myTime", 0l);
可以进入

protected void onCreate(Bundle savedInstanceState);
方法。此方法在首次创建活动时调用。这会将您的时间设置为保存的值(如果没有,则默认为0)

如果出于某种原因,需要在不同的时间(如活动生命周期的后期或早期)调用这些函数,您可以阅读更多有关它的信息

如果你喜欢这个答案,也请投票支持2Dee的答案。有些代码是从那里复制/粘贴的


快乐编码!如果您还有更多问题,请留下评论。

不太多,因为我不太明白这是如何工作的,这就是为什么我不得不问:)您能帮我吗?请避免只链接答案。有关详细信息,请参阅帮助部分。2Dee&Michael Berkowski:没问题,谢谢你的回答。我在问题中解释了我想做什么。你能帮我把它编出来吗?(或者告诉我来帮我)。我想我需要这样:“保存一个值(比如一个int)”。我对编码很新。我已经更新了上面的代码,我认为你必须在onStop方法中保存你的值,并且遵循chromo.stop()很好。1个问题:什么是“我的价值”、“我的保存价值”和“我的智力1”:my_saved_value是您将从SharedReferences返回的值,您保存的my_value是您传递给要保存的SharedReferences的值(在您的情况下应该是您的chrono值)。my_int_1只是一个字符串,用于标识您在SharedReferences中的值,如果您愿意,它的id是正确的吗??为什么我会在putInt上出错??我希望你能回答!我对编码很陌生,所以我不知道如何使用你刚才给我的这些代码,以及使用哪些代码。你能帮我描述一下我是如何用我的特殊代码来实现这一点的吗?如果我理解正确,你想在活动关闭时节省一段时间,并在再次打开时检索它吗?在这种情况下,您可以覆盖活动中的onDestroy方法,将时间保存在该方法中的SharedReferences中,并在onCreate中,在获取对计时器的引用后,根据从SharedReferences检索的值设置时间。这更清楚吗?如果没有,请详细解释您遇到的问题,以便我可以帮助您解决;)是的,那正是我想要的!但我仍然不明白这是怎么回事。你能给我编码一下吗,或者给我举个例子。你有我的代码,并且确切地知道我需要什么帮助:)我不会为你编码,因为我通常为此收费:)更严肃地说,我为你编码对你没有多大帮助,这是整个“给一个人一条鱼或教他如何钓鱼”的故事。但我想让您阅读有关管理活动生命周期的官方教程,通过我提供的SharedReference代码,您应该可以到达:我强烈建议您在官方页面上完成有关常见主题的基本培训。永远不要害怕尝试样品和玩它们;)我试试看!谢谢你的帮助。谢谢你的帮助。但是Tr4X做了一个适合我的代码(我现在尝试修复一些小问题)。再次感谢你的帮助!