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来检查值是否确实从主活动传递到第二个活动时,它确实是零。所以我真的不知道为什么它在计时表上不起作用。我已经更新了密码你能看一下吗?