EditText表單驗證(三)
阿新 • • 發佈:2018-11-10
說明
綜合EditText表單驗證(一)與EditText表單驗證(二)。
使用
AutomaticCheckHandle
package data; import android.content.Context; import android.support.annotation.NonNull; import android.support.v4.content.ContextCompat; import android.view.View; import android.widget.EditText; import com.afollestad.materialdialogs.DialogAction; import com.afollestad.materialdialogs.MaterialDialog; import com.google.gson.Gson; import com.self.zsp.dfs.R; import com.zhy.http.okhttp.OkHttpUtils; import com.zhy.http.okhttp.callback.StringCallback; import org.litepal.LitePal; import java.math.BigDecimal; import java.util.List; import entity.check.AutomaticCheck; import entity.check.AutomaticCheckBean; import okhttp3.Call; import util.KeyboardUtils; import util.LogUtils; import value.Code; import value.Url; import widget.ZsDialog; /** * Created on 2018/7/24. * * @desc 自動校驗處理 */ public class AutomaticCheckHandle implements View.OnFocusChangeListener { /** * 上下文 */ private Context context; /** * 標誌 */ private int flag; /** * 最大/小值 */ private BigDecimal bigDecimalMin; private BigDecimal bigDecimalMax; /** * 最大/小提示 */ private String minHint; private String maxHint; /** * constructor */ public AutomaticCheckHandle() { } /** * constructor * * @param context 上下文 * @param flag 標誌 * @param bigDecimalMin 最小值 * @param minHint 最小提示 */ public AutomaticCheckHandle(Context context, int flag, BigDecimal bigDecimalMin, String minHint) { this.context = context; this.flag = flag; this.bigDecimalMin = bigDecimalMin; this.minHint = minHint; } /** * constructor * * @param context 上下文 * @param flag 標誌 * @param bigDecimalMin 最小值 * @param bigDecimalMax 最大值 * @param minHint 最小提示 * @param maxHint 最大提示 */ public AutomaticCheckHandle(Context context, int flag, BigDecimal bigDecimalMin, BigDecimal bigDecimalMax, String minHint, String maxHint) { this.context = context; this.flag = flag; this.bigDecimalMin = bigDecimalMin; this.bigDecimalMax = bigDecimalMax; this.minHint = minHint; this.maxHint = maxHint; } @Override public void onFocusChange(View v, boolean hasFocus) { if (!hasFocus) { EditText editText = (EditText) v; String result = editText.getText().toString(); if (!"".equals(result)) { BigDecimal bigDecimalResult = new BigDecimal(result); AutomaticCheck automaticCheck = LitePal.findFirst(AutomaticCheck.class); switch (flag) { // 密度 case 1: int minCompareResultMiddle = bigDecimalResult.compareTo(bigDecimalMin); int maxCompareResultMiddle = bigDecimalResult.compareTo(bigDecimalMax); if (minCompareResultMiddle < 0) { formValidationRangeShow(editText, minHint); } else if (maxCompareResultMiddle > 0) { formValidationRangeShow(editText, maxHint); } else { automaticCheck(editText, result, automaticCheck); } break; // FV case 2: int minCompareResultNotLess = bigDecimalResult.compareTo(bigDecimalMin); if (minCompareResultNotLess < 0) { formValidationRangeShow(editText, minHint); } else { automaticCheck(editText, result, automaticCheck); } break; // PH case 3: minCompareResultMiddle = bigDecimalResult.compareTo(bigDecimalMin); maxCompareResultMiddle = bigDecimalResult.compareTo(bigDecimalMax); if (minCompareResultMiddle < 0) { formValidationRangeShow(editText, minHint); } else if (maxCompareResultMiddle > 0) { formValidationRangeShow(editText, maxHint); } else { automaticCheck(editText, result, automaticCheck); } break; // FL case 4: minCompareResultMiddle = bigDecimalResult.compareTo(bigDecimalMin); maxCompareResultMiddle = bigDecimalResult.compareTo(bigDecimalMax); if (minCompareResultMiddle < 0) { formValidationRangeShow(editText, minHint); } else if (maxCompareResultMiddle > 0) { formValidationRangeShow(editText, maxHint); } else { automaticCheck(editText, result, automaticCheck); } break; default: break; } } } } /** * 自動校驗 * * @param editText 輸框 * @param result 結果 * @param automaticCheck 資料 */ private void automaticCheck(EditText editText, String result, AutomaticCheck automaticCheck) { if (automaticCheck != null) { Double resultDouble = Double.valueOf(result); String complexHint = automaticCheck.getFzts(); switch (flag) { // 密度 case 1: String densityMin = automaticCheck.getDensityMin(); String densityMax = automaticCheck.getDensityMax(); if (densityMin != null && resultDouble < Double.valueOf(densityMin)) { automaticCheckRangeShow(editText, context.getString(R.string.densitySmaller), complexHint, densityMin, densityMax); } if (densityMax != null && resultDouble > Double.valueOf(densityMax)) { automaticCheckRangeShow(editText, context.getString(R.string.densityBigger), complexHint, densityMin, densityMax); } break; // FV case 2: String fvMin = automaticCheck.getFvMin(); String fvMax = automaticCheck.getFvMax(); if (fvMin != null && resultDouble < Double.valueOf(fvMin)) { automaticCheckRangeShow(editText, context.getString(R.string.fvSmaller), complexHint, fvMin, fvMax); } if (fvMax != null && resultDouble > Double.valueOf(fvMax)) { automaticCheckRangeShow(editText, context.getString(R.string.fvBigger), complexHint, fvMin, fvMax); } break; // PH case 3: String phMin = automaticCheck.getPhMin(); String phMax = automaticCheck.getPhMax(); if (phMin != null && resultDouble < Double.valueOf(phMin)) { automaticCheckRangeShow(editText, context.getString(R.string.phSmaller), complexHint, phMin, phMax); } if (phMax != null && resultDouble > Double.valueOf(phMax)) { automaticCheckRangeShow(editText, context.getString(R.string.phBigger), complexHint, phMin, phMax); } break; // FL case 4: String flMin = automaticCheck.getFlMin(); String flMax = automaticCheck.getFlMax(); if (flMin != null && resultDouble < Double.valueOf(flMin)) { automaticCheckRangeShow(editText, context.getString(R.string.flSmaller), complexHint, flMin, flMax); } if (flMax != null && resultDouble > Double.valueOf(flMax)) { automaticCheckRangeShow(editText, context.getString(R.string.flBigger), complexHint, flMin, flMax); } break; default: break; } } } /** * 提取範圍 * * @param year 年份 * @param block 區塊 * @param constructionType 施工型別 * @param wellNumber 井號 * @param ground 地層 */ public void extractionRange(String year, String block, String constructionType, String wellNumber, String ground) { OkHttpUtils .get() .url(Url.AUTOMATIC_CHECK) .addParams("n", year) .addParams("qk", block) .addParams("sglx", constructionType) .addParams("jh", wellNumber) .addParams("dc", ground) .tag(this) .build() .execute(new StringCallback() { @Override public void onError(Call call, Exception e, int id) { } @Override public void onResponse(String response, int id) { LogUtils.e(response); if (Code.flag(response)) { AutomaticCheckBean automaticCheckBean = new Gson().fromJson(response, AutomaticCheckBean.class); AutomaticCheckBean.DataBean dataBean = automaticCheckBean.getData(); // 範圍集合 List<AutomaticCheckBean.DataBean.ListBean> listBeans = dataBean.getList(); if (listBeans != null && listBeans.size() > 0) { AutomaticCheck automaticCheck = new AutomaticCheck(); // 複雜提示 automaticCheck.setFzts(dataBean.getFzts()); for (AutomaticCheckBean.DataBean.ListBean listBean : listBeans) { switch (listBean.getCs()) { case "ρ": automaticCheck.setDensityMin(listBean.getZxz()); automaticCheck.setDensityMax(listBean.getZdz()); break; case "Fv": automaticCheck.setFvMin(listBean.getZxz()); automaticCheck.setFvMax(listBean.getZdz()); break; case "PH": automaticCheck.setPhMin(listBean.getZxz()); automaticCheck.setPhMax(listBean.getZdz()); break; case "FL": automaticCheck.setFlMin(listBean.getZxz()); automaticCheck.setFlMax(listBean.getZdz()); break; default: break; } } LitePal.deleteAll(AutomaticCheck.class); automaticCheck.save(); } } else { if (LitePal.count(AutomaticCheck.class) > 0) { LitePal.deleteAll(AutomaticCheck.class); } } } }); } /** * 表單驗證顯範圍 * * @param editText 輸框 * @param hint 提示 */ private void formValidationRangeShow(final EditText editText, String hint) { ZsDialog.materialStringContentDialogOneClick(context, hint, R.string.refill) .onPositive(new MaterialDialog.SingleButtonCallback() { @Override public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { dialog.dismiss(); KeyboardUtils.showKeyboardEditText(context, editText); } }).cancelable(false).show(); } /** * 自動校驗顯範圍 * * @param editText 輸框 * @param title 標題 * @param complexHint 複雜提示 * @param minValue 最小值 * @param maxValue 最大值 */ private void automaticCheckRangeShow(final EditText editText, String title, String complexHint, String minValue, String maxValue) { ZsDialog.materialTitleContentDialogOneClick(context, title, ContextCompat.getColor(context, R.color.fontInput), complexHint + '\n' + '\n' + context.getString(R.string.minValue) + minValue + context.getString(R.string.maxValue) + maxValue, ContextCompat.getColor(context, R.color.fontHint), context.getString(R.string.refill)) .onPositive(new MaterialDialog.SingleButtonCallback() { @Override public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { dialog.dismiss(); KeyboardUtils.showKeyboardEditText(context, editText); } }).cancelable(false).show(); } /** * 銷燬 */ public void automaticCheckDestroy() { OkHttpUtils.getInstance().cancelTag(this); } }
主程式碼
單提
editText.setOnFocusChangeListener(new AutomaticCheckHandle(getContext(), 2, BigDecimal.valueOf(26), "粘度FV不可小於26"));
雙提
editText.setOnFocusChangeListener(new AutomaticCheckHandle(getContext(), 1, BigDecimal.valueOf(0.8), BigDecimal.valueOf(3.0), "密度ρ不可小於0.8", "密度ρ不可大於3.0"));