Help us understand the problem. What is going on with this article?

バリデーションライブラリ Android Sarippr の導入

More than 5 years have passed since last update.

Android Saripprとは

ragunathjawahar/android-saripaar
アノテーションによって入力バリデーションを行ってくれるとても便利なライブラリです。
バリデートの内容やエラーメッセージのカスタムもできます!

Android Saripprの使い方

※2015年11月時点の情報です

  • build.gradleに依存関係を追加します
dependencies {
    compile 'com.mobsandgeeks:android-saripaar:2.0.3'
}
  • ProGuardを追加します
-keep class com.mobsandgeeks.saripaar.** {*;}
-keep @com.mobsandgeeks.saripaar.annotation.ValidateUsing class * {*;}
// 必須項目、メールアドレス形式であるかチェックする
@NotEmpty
@Email
private EditText emailEditText;

// 6文字以上入力がなければエラー
@Password(min = 6)
private EditText passwordEditText;

// チェックがない場合は指定したエラーメッセージを出力
// message指定のない場合はデフォルトの英文メッセージが出力されます
@Checked(message = "You must agree to the terms.")
private CheckBox iAgreeCheckBox;
  • ValidationListenerをセットする
public class RegistrationActivity extends AppCompatActivity implements ValidationListener {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Varidator validator = new Validator(this);
        validator.setValidationListener(this);

        // バリデーション開始
        validator.validate();
    }

    @Override
    public void onValidationSucceeded() {
        Toast.makeText(this, "バリデーションを通過", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onValidationFailed(List<ValidationError> errors) {
        for (ValidationError error : errors) {
              // エラーになったViewを取得する
            View view = error.getView();
            // エラーメッセージを取得する(指定のない場合はデフォルトのメッセージ)
            String message = error.getCollatedErrorMessage(this);

            // エラーメッセージをEditTextやInputTextViewに表示する
            if (view instanceof EditText) {
                ((EditText) view).setError(message);
                mEmailTextInput.setError(message);
            } else {
                Toast.makeText(this, message, Toast.LENGTH_LONG).show();
            }
        }
    }

以上です!これだけでもよく使うバリデーションを簡単に行えますが、
下記のようにカスタムすることもできます。

エラーメッセージを変更したい!

指定したアノテーションに渡して変更することができます。

@NotEmpty(message = "メールアドレスを入力してください")
EditText mEmailView;

// リソースIDでも指定可能
@NotEmpty(messageResId = R.string.error_email_required)
EditText mEmailView;

独自のバリデーションを設定したい!

QuickRule でカスタムルールを作り、指定することができます。

QuickRule idRule = new QuickRule<EditText>() {
    @Override
    public boolean isValid(View view) {
        // 独自のバリデーションを追加し結果をreturnする
        String str = null;
        if(view instanceof EditText) {
            str = ((EditText) view).getText().toString();
        } 
        return str.length() < 6 && TextUtils.isDigitsOnly(str);
    }

    @Override
    public boolean isValid(Object o) {
        // isValid(Object) も使える
        return result;
    }

    @Override
    public String getMessage(Context context) {
        // エラー文字列の指定
        return getResources().getString(R.string.error_invalid_id);
    }
};
Validator validator = new Validator(this);
// 特定のViewにカスタムRuleを指定
// 今回の例では QuickRule に<EditText>の型指定をしたのでEditTextに対して指定する
validator.put(mIdView, idRule);
alph_a
Android開発中に悩んで解決したことをメモしていきます。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away