안녕하세요. 현재 날짜 계산기를 만들어 보려고 하는데요
SharedPreferences 를 이용해서 이름 텍스트 저장 까지는 진행 했는데
데이트피커의 선택 날짜는 앱 종료나 페이지 나감을 하면 초기화가 됩니다..
구동하려는 방식을 간략하게 말하자면
사용자가 선택한 날짜는 고정적으로 저장되어 있고
앱 구동시마다 저장된 날짜와 현재 날짜가 서로 비교되면서 "몇주 몇일 지났습니다"
식의 카운터를 구현해 보려고 합니다
코드 좀 한번 봐주시면 감사하겠습니다ㅠㅠ
public class Widget extends Activity {
private TextView ddayText;
private TextView todayText;
private TextView resultText;
private TextView nameText;
private Button dateButton;
private int tYear;
private int tMonth;
private int tDay;
private int dYear = 1;
private int dMonth = 1;
private int dDay = 1;
private long d;
private long t;
private long r;
private long w;
private int resultNumber = 0;
private int dayNumber = 0;
static final int DATE_DIALOG_ID = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.widget);
ddayText = (TextView) findViewById(R.id.dday);
todayText = (TextView) findViewById(R.id.today);
resultText = (TextView) findViewById(R.id.result);
dateButton = (Button) findViewById(R.id.dateButton);
nameText = (TextView) findViewById(R.id.name);
dateButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
showDialog(0);//----------------
}
});
//데이트피커, 닉네임 저장값 불러오기
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(Widget.this);
String str = prefs.getString("name", "");
prefs.getLong("date", new Date().getTime());
nameText.setText(str);
Calendar calendar = Calendar.getInstance();
tYear = calendar.get(Calendar.YEAR);
tMonth = calendar.get(Calendar.MONTH);
tDay = calendar.get(Calendar.DAY_OF_MONTH);
Calendar dCalendar = Calendar.getInstance();
dCalendar.set(dYear, dMonth, dDay);
t = calendar.getTimeInMillis();
d = dCalendar.getTimeInMillis();
r = (d - t) / (7 * 24 * 60 * 60 * 1000L);
w = (d - t) / (24 * 60 * 60 * 1000L);
resultNumber = (int) r * (-1);
dayNumber = (int) w * (-1);
updateDisplay();
}//OnCreate end
private void updateDisplay() {
todayText.setText(String.format("%d년 %d월 %d일", tYear, tMonth + 1, tDay));
ddayText.setText(String.format("%d년 %d월 %d일", dYear, dMonth + 1, dDay));
if (resultNumber >= 0) {
resultText.setText(String.format("임신 %d주 %d일", resultNumber % 45L, dayNumber % 7L + 1));
} else {
int absR = Math.abs(resultNumber);
resultText.setText(String.format("임신 %d주 %d일", absR, dayNumber % 7L));
}
}
@Override
protected Dialog onCreateDialog(int id) {
if (id == DATE_DIALOG_ID) {
return new DatePickerDialog(this, dDateSetListener, tYear, tMonth, tDay);
}
return null;
}
private DatePickerDialog.OnDateSetListener dDateSetListener = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
// TODO Auto-generated method stub
dYear = year;
dMonth = monthOfYear;
dDay = dayOfMonth;
final Calendar dCalendar = Calendar.getInstance();
dCalendar.set(dYear, dMonth, dDay);
d = dCalendar.getTimeInMillis();
r = (d - t) / (7 * 24 * 60 * 60 * 1000L);
w = (d - t) / (24 * 60 * 60 * 1000L);
resultNumber = (int) r * (-1);
dayNumber = (int) w * (-1);
updateDisplay();
}
};
@Override //데이트피커, 닉네임 저장
protected void onStop() {
super.onStop();
DatePicker dp = null;
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(Widget.this);
SharedPreferences.Editor editor = prefs.edit();
String str = nameText.getText().toString();
Date date = new Date(dp.getYear(), dp.getMonth(), dp.getDayOfMonth());
editor.putString("name", str);
prefs.edit().putLong("date", date.getTime()).apply();
editor.apply();
}
}