私はアンドロイド開発が初めてで、年齢計算機を開発しようとしています。私の現在のコードでは、年と月の違いを正しく見つけることができますが、日は正しくありません。私は何か間違ったことをしていることを知っています。しかし、私はそれを理解することができません。私もjodatime apiを使用しましたが、使用すると、この関数を呼び出すとアプリが閉じられ、何が間違っているのか理解できません。私のコードは次のとおりです。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDateDisplay = (TextView) findViewById(R.id.showMyDate);
mPickDate = (Button) findViewById(R.id.myDatePickerButton);
mPickDate.setOnClickListener(new View.OnClickListener() {
@SuppressWarnings("deprecation")
public void onClick(View v) {
showDialog(DATE_DIALOG_ID);
}
});
dob_Year = c.get(Calendar.YEAR);
dob_Month = c.get(Calendar.MONTH);
dob_Day = c.get(Calendar.DAY_OF_MONTH);
// display the current date
updateDisplay();
}
private void updateAge()
{
current_Year = c.get(Calendar.YEAR);
current_Month = c.get(Calendar.MONTH);
current_Day = c.get(Calendar.DAY_OF_YEAR);
if (current_Day < dob_Day) {
current_Month--;
current_Day+=c.getMaximum(dob_Month);
}
if (current_Month < dob_Month) {
current_Year--;
current_Month += 12;
}
int ageYear=current_Year-dob_Year;
int ageMonths=current_Month-dob_Month;
int ageDays= current_Day-dob_Day;
this.mAgeDisplay.setText(
new StringBuilder()
.append(ageYear).append(" Years ")
.append(ageMonths).append(" Months ")
.append(ageDays).append(" Days "));
}
private void updateDisplay() {
this.mDateDisplay.setText(
new StringBuilder()
// Month is 0 based so add 1
.append(dob_Day).append("-")
.append(dob_Month + 1).append("-")
.append(dob_Year).append(" "));
}
private DatePickerDialog.OnDateSetListener mDateSetListener =
new DatePickerDialog.OnDateSetListener() {
public void onDateSet(DatePicker view, int year,
int monthOfYear, int dayOfMonth) {
dob_Year = year;
dob_Month = monthOfYear;
dob_Day = dayOfMonth;
updateDisplay();
updateAge();
}
};
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DATE_DIALOG_ID:
return new DatePickerDialog(this,
mDateSetListener,
dob_Year, dob_Month, dob_Day);
}
return null;
}
このコード フラグメントでは、dob_ 変数が datepicker から値を取得します。