##はじめに
画像3枚は私が作った血圧をメモするアプリです。
EditText に入力した値をデータベースに保存しています。
その際、範囲外の値や null を避けたかったのでいろいろ調べ、if文と論理演算子で書きました。
ちなみにですが、このコードだと連続でデータ登録しようとするとアプリが落ちます。
連続登録落ちについての記事はこちら(私の書いた別記事に飛びます)。
##サンプルコード
###MainActivity.java
DatePicker と TimePicker、カスタムフォントのコードは省略しています。
DatePicker、TimePicker 導入で参考にしたブログ。
カスタムフォントの記事はこちら(私の書いた別記事に飛びます)。
if文は onClick メソッドの中に書きます。
(コードを載せておいて言うのもあれですが、insertDataメソッドは不安定なコードなのでそっくりそのまま使うことはお控えください)
public class MainActivity extends AppCompatActivity {
EditText getMaxBP;
EditText getMinBP;
EditText getPulse;
Button btEntry;
Button btNext;
DatabaseHelper helper;
SQLiteDatabase db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
helper = new DatabaseHelper(MainActivity.this);
db = helper.getWritableDatabase();
btEntry = findViewById(R.id.btEntry);
btEntry.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
getMaxBP = findViewById(R.id.etUpperBloodPressure);
String maxBP = (getMaxBP.getText().toString());
getMinBP = findViewById(R.id.etLowerBloodPressure);
String minBP = (getMinBP.getText().toString());
getPulse = findViewById(R.id.etPulse);
String pulse = (getPulse.getText().toString());
String nullMsg = "値を入力してください";
if(maxBP.length()==0){
getMaxBP.setError(nullMsg);
return;
} else if(minBP.length()==0){
getMinBP.setError(nullMsg);
return;
} else if(pulse.length()==0){
getPulse.setError(nullMsg);
return;
}
String errorMsg = "この値は入力できません";
if(!(80 <= Integer.parseInt(maxBP) && Integer.parseInt(maxBP) <= 180)){
getMaxBP.setError(errorMsg);
return;
} else if(!(50 <= Integer.parseInt(minBP) && Integer.parseInt(minBP) <= 140)){
getMinBP.setError(errorMsg);
return;
} else if(!(40 <= Integer.parseInt(pulse) && Integer.parseInt(pulse) <= 120)){
getPulse.setError(errorMsg);
return;
}
// データベースに値を登録するメソッド
insertData(db, maxBP, minBP, pulse);
// 登録に成功したらトーストがでる
Toast toast = Toast.makeText(BloodPressureAdditionActivity.this, "登録しました", Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
}
});
btNext = findViewById(R.id.btNext);
btNext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, SubActivity.class);
startActivity(intent);
}
});
}
public void insertData(SQLiteDatabase db, String maxBP, String minBP, String pulse){
ContentValues values = new ContentValues();
try {
values.put("_maxBP", maxBP);
values.put("_minBP", minBP);
values.put("_pulse", pulse);
db.insert("_BPtable", null, values);
} finally {
db.close();
}
}
insertDate メソッドの説明ですが、
_maxBP,_minBP,_pulse というカラムに引数の値を渡して insert メソッドで table(ここでは_BPtable) に登録しています。
ContentValues クラスについての説明はこのサイトがわかりやすいと思います。
Let's プログラミング キーと値を追加
insert と close は SQLiteDatabase のメソッドです。
デベロッパー:SQLiteDatabase クラス
##setError
setError を使えば自動的に画像のような赤いビックリマークと黒地白文字テキストのスタイルが出力されます。
二つif文を書きましたが、
一つ目はnull
二つ目は範囲外入力
にそれぞれ対応しています。
参考になれば幸いです。