質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Realm

RealmとはSQLiteやCore Dataに代わるモバイルデータベースです。iOSとAndroidの両方でサポートされています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

1回答

4773閲覧

Android Studioで日付を取得しRealmに保存する方法が知りたい

hry213

総合スコア10

Realm

RealmとはSQLiteやCore Dataに代わるモバイルデータベースです。iOSとAndroidの両方でサポートされています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2016/11/29 09:45

###前提・実現したいこと
私は現在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/ツール等のバージョンなど)
より詳細な情報

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

そんなものはネットで探しても見つかりません。ネットにあるのは正しく動くものだけです。あなたが正しくないことをしているからうまく動かないんです。

そのためデータがおかしい時は変数の値をログ出力しながらデバッグしてください。
データに関するデバッグはおかしくなった箇所を起点に考えます。
まず、Realmに保存する時に使っている変数を出力しましょう。この変数が正しいならRealmへの保存処理がおかしいです。正しく無いなら変数へ設定している箇所がおかしいです。
このように変数を辿りおかしくなる箇所を探すことがデバッグです。

投稿2016/11/29 15:01

yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hry213

2016/11/29 15:26

回答ありがとうございます。 出力を一つ一つ確認していこうと思います。
yona

2016/11/29 15:30

全部は難しいので辿って行くことをオススメします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問