java - 如何使用 sharedpreferences 保存计时器时间并在另一个活动中检索它
问题描述
我有一个计时器,Mainactivity.java
我想保存开始时间SharedPreferences
并让开始时间在另一个活动中显示它,但我不知道该怎么做。我试过Service
允许它在后台运行,但它失败了它不能将变量传递给另一个活动,人们建议使用SharedPreferences
会更容易。那么有谁知道如何节省开始时间并在另一个活动中获得价值?这是代码。
MainActivity.java
public class MainActivity extends AppCompatActivity{
private Chronometer chronometer;
protected FirebaseAuth firebaseauth = FirebaseAuth.getInstance();
@Override
protected void onStart(){
super.onStart();
chronometer.setBase(SystemClock.elapsedRealtime());
final long startTime = (SystemClock.elapsedRealtime() - chronometer.getBase());
final SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
final SharedPreferences.Editor editor = pref.edit();
@Override
public void onDataChange (DataSnapshot dataSnapshot){
String status = dataSnapshot.getValue(String.class);
if (status.equals ("occupied")) {
chronometer.start();
editor.putLong("time",startTime);
editor.commit();
}
else
mValueView1.setBackgroundColor(Color.parseColor("#66d983"));
}
@Override
public void onCancelled (DatabaseError databaseError){
}
});
SecondActivity.java
@Override
protected void onStart() {
super.onStart();
final SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
mChildReference1.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String status = dataSnapshot.getValue(String.class);
// firebase status is occupied start chronometer
if(status.equals("occupied")) {
savedTime = pref.getLong("time",01);
chronometer.setBase(savedTime);
chronometer.getBase();
chronometer.setVisibility(View.VISIBLE);
}
if(!status.equals("occupied")){
chronometer.setBase(SystemClock.elapsedRealtime());
pauseOffset = 0;
chronometer.stop();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
解决方案
如果您仅在一项活动中使用 sharedpreference ,则可以在您的活动中使用 getDefaultSharedPreferences() 或 getPreferences() 方法。但在您的情况下(如文档中所述)将一个 sharedPreference 用于多个活动,您应该分配一个共享首选项的名称。
这样,活动就知道要获取您的哪些共享偏好。只需在您的代码中更改它
SharedPreferences pref = getSharedPreferences("chornometer", Context.MODE_PRIVATE);
有关更多信息,请阅读文档
推荐阅读
- python - 如何在熊猫数据框中找到重复项?
- opengl-es - 带颜色的 OpenGL DrawArrays
- c# - C# JSON - 具有相同属性的不同类型的多个对象的序列化
- jwt - 在 HTTP API 网关中使用授权方时将 JWT 令牌替换为另一个 JWT 令牌
- javascript - Javascript 类 - 如何避免一遍又一遍地调用方法?
- reactjs - 表单加载时最初不会填充下拉字段
- javascript - Chart.JS - 错误的 Y 轴
- selenium - Capybara + Selenium + Web 抓取 - 并行请求失败
- android - 图像选择器库不适用于颤振应用
- r - 用 R 链接计划中的航班