Java 如何使用SharedReferences节省计时器时间并在另一个活动中检索它
我在Java 如何使用SharedReferences节省计时器时间并在另一个活动中检索它,java,android,sharedpreferences,chronometer,Java,Android,Sharedpreferences,Chronometer,我在main活动中有一个计时器。java我想使用SharedReferences保存开始时间,并在另一个活动中显示开始时间,但我不知道如何操作。我尝试了服务,该服务允许它在后台运行,但失败了,因为它无法将变量传递给另一个活动活动和人员建议使用SharedReferences会更容易。那么,有人知道如何节省启动时间并在另一项活动中获得价值吗?这是密码 MainActivity.java public class MainActivity extends AppCompatActivity{ pri
main活动中有一个计时器。java
我想使用SharedReferences
保存开始时间,并在另一个活动中显示开始时间,但我不知道如何操作。我尝试了服务
,该服务允许它在后台运行,但失败了,因为它无法将变量传递给另一个活动活动和人员建议使用SharedReferences
会更容易。那么,有人知道如何节省启动时间并在另一项活动中获得价值吗?这是密码
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){
}
});
@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) {
}
});
}
SecondActivity.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){
}
});
@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) {
}
});
}
如果您仅在一个活动中使用SharedReference,则可以在您的活动中使用GetDefaultSharedReferences()或getPreferences()方法。但是在您的情况下(如文档中所述),即在多个活动中使用一个SharedReference,您应该为SharedReference指定一个名称。
这样,活动就知道如何获取您的共享引用。只需在代码中更改此项
SharedPreferences pref = getSharedPreferences("chornometer", Context.MODE_PRIVATE);
有关更多信息,请阅读,因此我只需将
GetDefaultSharedReferences()
更改为此?是的,在这两个活动中,SharedReference的名称必须相同,但我仍然无法从MainActivity
获取开始时间,在第二个活动中,计时器仍然从0:00开始,这是因为您从chronometer.getBase()中获得开始时间,而这是0:00。我已将主活动中的开始时间编辑为(SystemClock.elapsedRealtime()-chronometer.getBase())
但第二个活动中的计时器仍然保持为零,但当我添加一个textview来检查值是否确实从主活动传递到第二个活动时,它确实是零。所以我真的不知道为什么它在计时表上不起作用。我已经更新了密码你能看一下吗?