java - 如何使用 sharedpreferences 保存计时器时间并在另一个 Activity 中检索它

标签 java android sharedpreferences chronometer

我在 Mainactivity.java 中有一个计时表我已经尝试过 Service 允许它在后台运行但是它失败了因为它不能将变量传递给另一个 Activity 并且人们建议使用 SharedPreferences 会更容易。那么有谁知道如何保存开始时间并在另一个 Activity 中获取值(value)?这是代码。

主 Activity .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){

              }

          });

第二个 Activity .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) {

            }

        });
    }

最佳答案

如果您仅在一项 Activity 中使用 sharedPreference,则可以在您的 Activity 中使用 getDefaultSharedPreferences() 或 getPreferences() 方法。但在您的情况下(如文档中所述),您在多个 Activity 中使用一个 sharedPreference,您应该为共享首选项分配一个名称。
这样 Activity 就知道获取您的哪些共享首选项。只需在您的代码中更改它

SharedPreferences pref = getSharedPreferences("chornometer", Context.MODE_PRIVATE);

有关更多信息,请阅读 documentation

关于java - 如何使用 sharedpreferences 保存计时器时间并在另一个 Activity 中检索它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58777436/

相关文章:

android - 如何在语义上比较两个句子?

android - 未存储 xml 首选项文件中的 defaultValue - 为什么?

java - 将参数化的 Map 值传递给通配符签名参数

android - 如何在 android 中从 omxcodec 转储 yuv 缓冲区

java - 为什么 exception.getCause() == 异常?

android - 在 Facebook 墙上发表评论

Android:获取具有其值(value)的sharedpreferences的关键

Android onSharedPreferenceChanged 在提交完成之前触发

java - 将图像加载到 ImageView JavaFX

java - Wordnet ws4j 混淆 lesk 值,迭代所有同义词集