🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

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

Q&A

解決済

1回答

2358閲覧

AndroidStudio  条件分岐

qwertyuio235

総合スコア5

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

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

0グッド

1クリップ

投稿2019/12/13 07:37

前提・実現したいこと

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

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

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

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

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

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

guest

回答1

0

ベストアンサー

・"dataをキーとして日記テーブル(Cal_TABLE)と体重テーブル(Weight_TABLE)のデータが存在する/しないをチェックして条件分岐"
この時にDBが存在するかしないかの条件分岐の指定の仕方がわかりません

おっしゃっている通りに DB に QUERY して結果で分岐すればよろしいのではないでしょうか.

投稿2019/12/13 10:53

jimbe

総合スコア13201

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

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

qwertyuio235

2019/12/13 15:06 編集

回答ありがとうございます ``` //カレンダーの日付がタップされた時の処理 public void onSelectedDayChange(CalendarView view, int year, int month, int dayOfMonth) { //年・月・日を合わせたdate変数を作る int date = year * 10000 + (month + 1) * 100 + dayOfMonth; String Stringdate = String.valueOf(date); //タップされた時に入力画面へ遷移 Intent intent = new Intent(getApplication(), EditActivity.class); ``` の下に ``` //Cal_TABLEのdiary,Weight_TABLEのweightのカラム数をカウント Cursor c1 = db.query("Cal_TABLE", new String[] {"diary"}, null, null, null, null, null); Cursor c2 = db.query("Weight_TABLE", new String[] {"weight"}, null, null, null, null, null); //変数を定義 int D_dbCheck; int W_dbCheck; //カウント数を格納 D_dbCheck = c1.getCount(); W_dbCheck = c2.getCount(); c1.close(); c2.close(); ``` を追加して条件分岐の条件に if(D_dbCheck == 0 && W_dbCheck == 0) という条件を追加したところ正常に動作しました。
jimbe

2019/12/13 17:21

登録のほうでは一度に両方のテーブルに入れているのですから, 有無チェックは一方だけで済むのではないでしょうか. また, そもそも両方に一度に登録するのでしたら, テーブルを一つに纏めて良いように思いますが, 分けている理由があるのでしょうか.
qwertyuio235

2019/12/14 03:26

登録での有無チェックを片方に、テーブルを二つ作成していたところを ご指摘のようにテーブルを一つにまとめました。正常に動作したのでテーブルを二つ作っていたのは冗長 だったようです。プログラムも見やすくなりテーブルの管理も楽になりました。 困っていたところが解決して助かりました、ご回答いただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問