【AndroidStudio】EditText 에 등록하는 값에 제한을 마련하고 싶다【Java】

소개



이미지 3장은 내가 만든 혈압을 메모하는 앱입니다.
EditText에 입력한 값을 데이터베이스에 저장합니다.
그 때, 범위외의 값이나 null 를 피하고 싶었으므로 여러가지 조사해, if문과 논리 연산자로 썼습니다.
그건 그렇고,이 코드라면 연속으로 데이터를 등록하려고하면 앱이 떨어집니다.
연속 등록 떨어짐에 대한 기사는 여기 (내가 쓴 다른 기사로 날아갑니다) .


샘플 코드



마이너 c 치비 ty. 자바



DatePicker와 TimePicker, 사용자 지정 글꼴 코드는 생략되었습니다.
DatePicker, TimePicker 도입에서 참고로 한 블로그 .
커스텀 폰트의 기사는 이쪽(내가 쓴 다른 기사로 날아갑니다) .
if 문은 onClick 메서드에 씁니다.
(코드를 올려 놓고 말하는 것도 있습니다만, insertData 메소드는 불안정한 코드이므로 똑같이 그대로 사용하는 것은 삼가해 주세요)

MainActivity.java
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
두 번째는 범위 밖 입력
에 각각 대응하고 있습니다.
도움이되면 다행입니다.

좋은 웹페이지 즐겨찾기