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

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

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

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

Java

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

Android Studio

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

解決済

AndroidStudio  条件分岐

qwertyuio235
qwertyuio235

総合スコア0

SQLite

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

Java

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

Android Studio

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

1回答

0評価

1クリップ

19閲覧

投稿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

package com.example.mycalender2; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.content.Intent; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.widget.CalendarView; import android.widget.TextView; public class CalenderActivity extends AppCompatActivity { //変数の定義 private DBActivity helper; private SQLiteDatabase db; private TextView D_textView; private TextView W_textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.create_cal); //カレンダーのidを取得 ((CalendarView) findViewById(R.id.calendarView)).setOnDateChangeListener(listener); //text_Viewのidを取得 D_textView = findViewById(R.id.text_diary); W_textView = findViewById(R.id.text_weight); }//protected void onCreate(Bundle savedInstanceState) //カレンダーの日付がタップされたか判定 CalendarView.OnDateChangeListener listener = new CalendarView.OnDateChangeListener() { // @Override /** * 日付部分タップ時に実行される処理 * * @param view 押下されたカレンダーのインスタンス * @param year タップされた日付の「年」 * @param month タップされた日付の「月」 * @param dayOfMonth タップされた日付の「日」 */ //カレンダーの日付がタップされた時の処理 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); //条件1 この条件分岐がわからない if (helper == null) { //DB呼び出し DBActivity helper = new DBActivity(getApplicationContext()); SQLiteDatabase db = helper.getReadableDatabase(); /*タップされた日付が入っているdataを送る (例:2019年12月10日がタップされたら20191210というデータを送る) */ intent.putExtra("date", date); startActivity(intent); //条件2 } else if (helper != null) { //日記DBから値を取得 Cursor cursor = db.query( "Cal_TABLE", new String[]{"diary"}, null, null, null, null, null); cursor.moveToFirst(); //取得した日記を表示画面に表示 StringBuilder sbulider = new StringBuilder(); sbulider.append(cursor.getString(0)); cursor.close(); D_textView.setText(sbulider.toString()); //たいじゅうDB から値を取得 cursor = db.query( "Weight_TABLE", new String[]{"weight"}, null, null, null, null, null); cursor.moveToFirst(); //取得した体重を表示 sbulider = new StringBuilder(); sbulider.append(cursor.getString(0)); cursor.close(); W_textView.setText(sbulider.toString()); }//if }//selectDayChange }; }

EditActivity

java

package com.example.mycalender2; import android.content.ContentValues; import android.content.Intent; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import androidx.appcompat.app.AppCompatActivity; public class EditActivity extends AppCompatActivity { protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.editer); final Intent intent = this.getIntent(); //dateをCalenderActivityから受け取る final String date = intent.getStringExtra("date"); //SQLを呼び出し DBActivity helper = new DBActivity(this); final SQLiteDatabase db = helper.getWritableDatabase(); //入力箇所のIDを取得 final EditText editerWeight= findViewById(R.id.editerWeight); final EditText editerDiary = findViewById(R.id.editerDiary); //登録ボタンが押されたとき Button DW_RetButton = findViewById(R.id.DW_RetButton); DW_RetButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //日記の処理 //dataを格納 String key_id = date; //日記入力箇所から文字を取得 String diary = editerDiary.getText().toString(); //日記DBに登録 ContentValues D_insertValues = new ContentValues(); D_insertValues.put("diary", diary); //dataとdiaryをCal_TABLEに保存 long D_id = db.insert("Cal_TABLE", diary,D_insertValues); long _id = db.insert("Cal_Table", key_id, D_insertValues); db.update("Cal_TABLE", D_insertValues, "diary=?", new String[]{ diary }); //体重の処理 //体重入力箇所から文字を取得 String weight = editerWeight.getText().toString(); //体重DBに登録 ContentValues W_insertValues = new ContentValues(); W_insertValues.put("weight", weight); //dataとweightをWeight_TABLEに保存 long W_id = db.insert("Weight_TABLE", weight, W_insertValues); db.update("Weight_TABLE", W_insertValues,"weight=?", new String[]{ weight }); //カレンダー画面に戻る Intent DIntent = new Intent(EditActivity.this,CalenderActivity.class); startActivity(DIntent); } }); }//AppCompatActivity }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

SQLite

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

Java

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

Android Studio

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