Как сэкономить время хронометра и извлечь его в другой деятельности, используя общие настройки - PullRequest
1 голос
/ 09 ноября 2019

У меня есть хронометр в 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) {

            }

        });
    }

1 Ответ

2 голосов
/ 09 ноября 2019

если вы используете sharedpreference только в одном действии, то можно использовать методы getDefaultSharedPreferences () или getPreferences () для вашего занятия. Но в вашем случае (как упомянуто в документации), который использует один sharedPreference для нескольких действий, выдолжен назначить имя для разделяемой настройки.
таким образом, чтобы действие узнало, какие из ваших общих привилегий. просто измените это в своем коде

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

для получения дополнительной информации прочитайте документацию

...