版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zsp_android_com/article/details/83104479
说明
综合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"));