我已经申请了。它是一个显示您按下它的时间的按钮。每次我"杀死"应用程序,计时器再次从0开始(自然)。如何让应用程序保存按下按钮的时间,所以当应用程序被杀死然后你打开它时,计时器就在你停止的时候。我有一些关于这是怎么做的红色,我认为它与SharedPreferences有关。
我的代码:
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;
}
});
}}
答案 0 :(得分:1)
在首选项中设置值:
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共享偏好教程:http://www.tutorialspoint.com/android/android_shared_preferences.htm
它可以帮助您解决问题
答案 1 :(得分:1)
保存在SharedPreferences中:
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));
}
答案 2 :(得分:1)
编辑:
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
现在您必须在需要时(当计时器停止或应用程序关闭时)保存该值
prefs.edit().putInt("the_package_of_your_app.my_int_1", my_value).apply();
答案 3 :(得分: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();
方法。此方法可以在要调用的Activity中重载,因为活动被销毁(终止,关闭等),以便可以保存任何数据(这是您想要做的)。
同样地,
SharedPreferences prefs= getSharedPreferences("prefs", Context.MODE_PRIVATE);
time = sharedpreferences.getLong("myTime", 0l);
可以进入
protected void onCreate(Bundle savedInstanceState);
方法。首次创建活动时将调用此方法。这会将您的时间设置为保存的值(如果没有则默认为0)。
如果出于某种原因需要在不同的时间调用这些内容(例如活动生命周期的后期或更早版本),您可以阅读更多相关信息here。
如果您喜欢这个答案,请同时提交2Dee的回答。一些代码从字面上复制/粘贴。
快乐的编码!如果您有更多问题,请发表评论。