마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

sharedPreferences으로 현재시간을 저장하고싶습니다.

0 추천

안녕하세요 버튼을 눌렀을때 현재시간이 텍스트뷰에 찍히고 어플을 종료하거나 액티비티를 전환해도 값이 남아있는 기능을 구현하고싶습니다. 전에 timepicker를 저장하는건 잘 되었는데, 현재시간을 저장하려니 자꾸 초기화가 되네요. 주말까지해야하는데 .. 부탁드립니다 ㅠ

 

public class Clock extends AppCompatActivity {

   SharedPreferences pref;          
   SharedPreferences.Editor editor;

   Button btnNow, checkFeed, btnStart, btnReset;

    long now = System.currentTimeMillis();


    Date date = new Date(now);
    SimpleDateFormat daynow = new SimpleDateFormat("MM월 dd일 HH시 mm분 ss초", Locale.KOREA);

    String ndate = daynow.format(date);
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_clock);
 pref = getApplicationContext().getSharedPreferences("pref",Activity.MODE_PRIVATE);
 editor = pref.edit();
 ndate = pref.getString("mTime", ndate);
 tVSecond.setText(ndate);
 btnStart.setOnClickListener(new View.OnClickListener() {
     @Override
    public void onClick(View view) {
         tVSecond.setText(ndate);
         editor.putString("mTime", ndate);
         editor.apply();    }
});
}
홍혁기 (150 포인트) 님이 2022년 6월 25일 질문

1개의 답변

0 추천
 
채택된 답변

btnStart를 클릭할 때 현재시간을 저장한다는 말씀이시죠? 그렇다면 Date 멤버변수에 저장하시 마시고 btnStart의 클릭이벤트에서 처리하세요.

public class DateUtil {
   public static String formattedTime(Date date): String {
       SimpleDateFormat sdf = new SimpleDateFormat("....");
       return sdf.format(date);
   }
}

public class ClockRepository {
    private static final TIME_KEY = "mTime";
   
    private final SharedPreferences  prefs = ,,, 
        
    private void saveTime(long time) {
        prefs.editor()
          .putLong(TIME_KEY, time);
          .apply();   
    }

    public String readTime() {
        long time = pref.getLong(TIME_KEY, 0L);
        return DateUtil.formattedTime(time);
    }
}


public class ClockActivity extends AppCompatActivity() {

private ClockRepository clockRepository;
   
   @Override
   public void onCreate(...) {
       super.onCreate(...);
       setContentView(...);
  
       clockRepository = new ClockRepository();
       setupViews();
   }

  private void setupViews() {
     btnStart.setOnClickListener(new View.OnClickListener() {
         @Override
          public void onClick(View view) {
             saveCurrentTime();
          }
    });
  }

   private void saveCurrentTime() {
       clockRepository.saveTime(System.currentTimeMills(););
       tVSecond.setText(clockRepository.readTime());
   }
}

 

spark (224,800 포인트) 님이 2022년 6월 25일 답변
홍혁기님이 2022년 6월 26일 채택됨
...