###前提・実現したいこと
私は現在Android Studioで収支管理のアプリを作っています。参考書のサンプルコードを加工して作っており、収入の管理としてバイトのシフト管理機能をつけたいと思っています。日付を登録するときに、サンプルでは日付をそのまま入力していたのですが、それをDatePickerDialogを使って簡単に入力できるようにしたいと思っています。
ボタンを押してDatepickerDialogを開き、選択した日付をString型に変更し、それをRealmで保存できるようにしたいと思っています。
###発生している問題・エラーメッセージ
DatepickerDialogで取得した日付をRealmに保存できるように値を渡したいのですが、どこをつなげばいいかわかりません。どのように値を保存できる形式に変えるか、教えていただきたいです。初歩的な質問だとは思いますがよろしくお願いします。
エラーメッセージ
###該当のソースコード
import android.app.DatePickerDialog; import android.app.Dialog; import android.app.DialogFragment; import android.graphics.Color; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.DatePicker; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import io.realm.Realm; import io.realm.RealmResults; public class IncomeEditActivity extends AppCompatActivity { EditText mDateEdit; EditText mJobEdit; EditText mWageEdit; EditText mTimeEdit; TextView payCalc; EditText mExtraEdit; Button mDelete; private Calendar mCal = Calendar.getInstance(); public static class DatePickerFragment extends DialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { final Calendar c = Calendar.getInstance(); int year = c.get(Calendar.YEAR); int month = c.get(Calendar.MONTH); int day = c.get(Calendar.DAY_OF_MONTH); return new DatePickerDialog(getActivity(), new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { ((IncomeEditActivity) getActivity()) .setCalendar(year, monthOfYear, dayOfMonth); } }, year, month, day); } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_income_edit); mDateEdit = (EditText) findViewById(R.id.dateEdit); mJobEdit = (EditText) findViewById(R.id.jobEdit); mWageEdit = (EditText) findViewById(R.id.wageEdit); mTimeEdit = (EditText) findViewById(R.id.timeEdit); payCalc = (TextView) findViewById(R.id.payText); mExtraEdit = (EditText) findViewById(R.id.extraEdit); mDelete = (Button) findViewById(R.id.income_delete); showData(); long incomeId = getIntent().getLongExtra("income_id", -1); if (incomeId != -1) { Realm realm = Realm.getInstance(this); RealmResults<Income> results = realm.where(Income.class) .equalTo("id", incomeId).findAll(); Income income = results.first(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); String date = sdf.format(income.getDate()); mDateEdit.setText(date); mJobEdit.setText(income.getJob()); mWageEdit.setText(income.getWage()); mTimeEdit.setText(income.getTime()); payCalc.setText(income.getPay()); mExtraEdit.setText(income.getExtra()); int a = Integer.parseInt(mWageEdit.getText().toString()); int b = Integer.parseInt(mTimeEdit.getText().toString()); int c = a * b; String pay = String.valueOf(c); payCalc.setText(pay); mDelete.setVisibility(View.VISIBLE); } else { mDelete.setVisibility(View.INVISIBLE); } } public void setCalendar(int year ,int month, int day) { mCal.set(year, month, day); showData(); } private void showData() { String today = mCal.get(Calendar.YEAR) + "/" + (mCal.get(Calendar.MONTH) + 1) + "/" + mCal.get(Calendar.DATE); Button date = (Button) findViewById(R.id.dateEditB); date.setText(today); } public void onSaveTapped(View view) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); Date date = new Date(); try { date = sdf.parse(mDateEdit.getText().toString()); } catch (ParseException e) { e.printStackTrace(); } long incomeId = getIntent().getLongExtra("income_id", -1); if (incomeId != -1) { Realm realm = Realm.getInstance(this); RealmResults<Income> results = realm.where(Income.class) .equalTo("id", incomeId).findAll(); realm.beginTransaction(); Income income = results.first(); income.setDate(date); income.setJob(mJobEdit.getText().toString()); income.setWage(mWageEdit.getText().toString()); income.setTime(mTimeEdit.getText().toString()); income.setPay(payCalc.getText().toString()); income.setExtra(mExtraEdit.getText().toString()); int a = Integer.parseInt(mWageEdit.getText().toString()); int b = Integer.parseInt(mTimeEdit.getText().toString()); int c = a * b; TextView payCalc = (TextView)findViewById(R.id.payText); String pay =String.valueOf(c); payCalc.setText(pay); realm.commitTransaction(); Snackbar.make(findViewById(android.R.id.content), "アップデートしました", Snackbar.LENGTH_SHORT) .setAction("戻る", new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }) .setActionTextColor(Color.YELLOW) .show(); } else { Realm realm = Realm.getInstance(this); realm.beginTransaction(); Number maxId = realm.where(Income.class).max("id"); long nextId = 1; if (maxId != null) nextId = maxId.longValue() + 1; Income income = realm.createObject(Income.class); income.setId(nextId); income.setDate(date); income.setJob(mJobEdit.getText().toString()); income.setWage(mWageEdit.getText().toString()); income.setTime(mTimeEdit.getText().toString()); income.setPay(payCalc.getText().toString()); income.setExtra(mExtraEdit.getText().toString()); realm.commitTransaction(); Toast.makeText(this, "追加しました", Toast.LENGTH_SHORT).show(); finish(); } } public void onDeleteTapped(View view) { long incomeId = getIntent().getLongExtra("income_id", -1); if(incomeId != -1){ Realm realm = Realm.getInstance(this); RealmResults<Income> results = realm.where(Income.class) .equalTo("id",incomeId).findAll(); realm.beginTransaction(); results.remove(0); realm.commitTransaction(); Toast.makeText(this,"削除しました", Toast.LENGTH_SHORT).show(); } finish(); } public void onDateButtonTapped(View view) { DialogFragment picker = new DatePickerFragment(); picker.show(getFragmentManager(), "datePicker"); } }
###試したこと
ネットなどで調べていろいろ試してみました。DatepickerDialogから取得した日付を日付編集のクラスに返してみたりしたのですが、どうしても選択した日付ではなく今日の日付が保存されてしまいました。
###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/11/29 15:26
2016/11/29 15:30