前提・実現したいこと
AndroidStudioでスケジューリングアプリを作成しようとしています。
メイン画面(CalenderActivity)と入力画面(EditActivity)の二つの画面で動作します。
具体的な動作は
@CalenderActivity
1.
起動したときCalenderActivityが起動し、画面上部にCalenderViewでカレンダーが
画面下部にTextViewで日記・体重を表示する画面を作成
2.
CalenderViewの日付部分をタップすると条件分岐
(・日付部分を格納した変数data[2019年11月1日なら20191101となる]からDB内を検索する。
・"dataをキーとして日記テーブル(Cal_TABLE)と体重テーブル(Weight_TABLE)のデータが存在する/しないをチェックして条件分岐")
3.
データが存在する場合
CalenderActivity内で画面下部のTextViewに日記・体重を表示
4.
データが存在しない場合
EditActivityへ遷移する。(この時dataも一緒に送る)
5.
戻ってきたらDBからdata をキーにして,日記テーブル(Cal_TABLE)と体重テーブル(Weight_TABLE)からデータを取得しTextViewに表示
@EditActivity
1.
CalenderViewからdataを受け取り、画面上部にEditTextで日記入力画面(Diary_Edit)・体重入力画面(Weight_Edit)を表示、
画面下部に登録ボタンを表示する
登録ボタンが押されたらDiary_Edit・Weight_Editの内容を取得しCal_TABLEとWeight_TABLEに保存
(この時にdataもそれぞれのテーブルに保存する)
3.
CalenderActivityに遷移する。
###わからないこと
・"dataをキーとして日記テーブル(Cal_TABLE)と体重テーブル(Weight_TABLE)のデータが存在する/しないをチェックして条件分岐"
この時にDBが存在するかしないかの条件分岐の指定の仕方がわかりません。ソースコードには仮の条件を入れてあります。
わかりづらくなってしまい申し訳ないですが、ご回答よろしくお願いします。
該当のソースコード
CalenderActivity
java
1 2package com.example.mycalender2; 3 4import androidx.appcompat.app.AppCompatActivity; 5 6import android.os.Bundle; 7 8import android.content.Intent; 9import android.database.Cursor; 10import android.database.sqlite.SQLiteDatabase; 11import android.widget.CalendarView; 12import android.widget.TextView; 13 14public class CalenderActivity extends AppCompatActivity { 15 16 17 //変数の定義 18 private DBActivity helper; 19 private SQLiteDatabase db; 20 private TextView D_textView; 21 private TextView W_textView; 22 23 @Override 24 protected void onCreate(Bundle savedInstanceState) { 25 super.onCreate(savedInstanceState); 26 setContentView(R.layout.create_cal); 27 28 //カレンダーのidを取得 29 ((CalendarView) findViewById(R.id.calendarView)).setOnDateChangeListener(listener); 30 31 //text_Viewのidを取得 32 D_textView = findViewById(R.id.text_diary); 33 W_textView = findViewById(R.id.text_weight); 34 }//protected void onCreate(Bundle savedInstanceState) 35 36 //カレンダーの日付がタップされたか判定 37 CalendarView.OnDateChangeListener listener = new CalendarView.OnDateChangeListener() { 38 39 40 // @Override 41 42 /** 43 * 日付部分タップ時に実行される処理 44 * 45 * @param view 押下されたカレンダーのインスタンス 46 * @param year タップされた日付の「年」 47 * @param month タップされた日付の「月」 48 * @param dayOfMonth タップされた日付の「日」 49 */ 50 51 //カレンダーの日付がタップされた時の処理 52 public void onSelectedDayChange(CalendarView view, int year, int month, int dayOfMonth) { 53 //年・月・日を合わせたdate変数を作る 54 int date = year * 10000 + (month + 1) * 100 + dayOfMonth; 55 String Stringdate = String.valueOf(date); 56 57 //タップされた時に入力画面へ遷移 58 Intent intent = new Intent(getApplication(), EditActivity.class); 59 60 61 62 //条件1 この条件分岐がわからない 63 if (helper == null) { 64 //DB呼び出し 65 DBActivity helper = new DBActivity(getApplicationContext()); 66 SQLiteDatabase db = helper.getReadableDatabase(); 67 /*タップされた日付が入っているdataを送る 68 (例:2019年12月10日がタップされたら20191210というデータを送る) 69 */ 70 intent.putExtra("date", date); 71 startActivity(intent); 72 //条件2 73 } else if (helper != null) { 74 75 //日記DBから値を取得 76 Cursor cursor = db.query( 77 "Cal_TABLE", 78 new String[]{"diary"}, 79 null, 80 null, 81 null, 82 null, 83 null); 84 85 cursor.moveToFirst(); 86 87 //取得した日記を表示画面に表示 88 StringBuilder sbulider = new StringBuilder(); 89 sbulider.append(cursor.getString(0)); 90 cursor.close(); 91 D_textView.setText(sbulider.toString()); 92 93 //たいじゅうDB から値を取得 94 cursor = db.query( 95 "Weight_TABLE", 96 new String[]{"weight"}, 97 null, 98 null, 99 null, 100 null, 101 null); 102 cursor.moveToFirst(); 103 104 //取得した体重を表示 105 sbulider = new StringBuilder(); 106 107 sbulider.append(cursor.getString(0)); 108 109 cursor.close(); 110 111 W_textView.setText(sbulider.toString()); 112 113 114 115 116 }//if 117 118 119 }//selectDayChange 120 121 }; 122} 123
EditActivity
java
1package com.example.mycalender2; 2 3import android.content.ContentValues; 4import android.content.Intent; 5import android.database.sqlite.SQLiteDatabase; 6import android.os.Bundle; 7import android.view.View; 8import android.widget.Button; 9import android.widget.EditText; 10 11import androidx.appcompat.app.AppCompatActivity; 12 13public class EditActivity extends AppCompatActivity { 14 protected void onCreate(Bundle savedInstanceState){ 15 super.onCreate(savedInstanceState); 16 17 setContentView(R.layout.editer); 18 19 final Intent intent = this.getIntent(); 20 21 //dateをCalenderActivityから受け取る 22 final String date = intent.getStringExtra("date"); 23 24 //SQLを呼び出し 25 DBActivity helper = new DBActivity(this); 26 final SQLiteDatabase db = helper.getWritableDatabase(); 27 28 //入力箇所のIDを取得 29 final EditText editerWeight= findViewById(R.id.editerWeight); 30 final EditText editerDiary = findViewById(R.id.editerDiary); 31 32 //登録ボタンが押されたとき 33 Button DW_RetButton = findViewById(R.id.DW_RetButton); 34 DW_RetButton.setOnClickListener(new View.OnClickListener() { 35 @Override 36 public void onClick(View v) { 37 //日記の処理 38 39 //dataを格納 40 String key_id = date; 41 42 //日記入力箇所から文字を取得 43 String diary = editerDiary.getText().toString(); 44 45 //日記DBに登録 46 ContentValues D_insertValues = new ContentValues(); 47 D_insertValues.put("diary", diary); 48 49 //dataとdiaryをCal_TABLEに保存 50 long D_id = db.insert("Cal_TABLE", diary,D_insertValues); 51 long _id = db.insert("Cal_Table", key_id, D_insertValues); 52 db.update("Cal_TABLE", D_insertValues, "diary=?", new String[]{ diary }); 53 54 //体重の処理 55 56 //体重入力箇所から文字を取得 57 String weight = editerWeight.getText().toString(); 58 59 //体重DBに登録 60 ContentValues W_insertValues = new ContentValues(); 61 W_insertValues.put("weight", weight); 62 63 //dataとweightをWeight_TABLEに保存 64 long W_id = db.insert("Weight_TABLE", weight, W_insertValues); 65 db.update("Weight_TABLE", W_insertValues,"weight=?", new String[]{ weight }); 66 67 //カレンダー画面に戻る 68 Intent DIntent = new Intent(EditActivity.this,CalenderActivity.class); 69 startActivity(DIntent); 70 71 } 72 }); 73 74 }//AppCompatActivity 75} 76
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/13 15:06 編集
2019/12/13 17:21
2019/12/14 03:26