Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java Android Studio中验证日、月和年,_Java_Android_Android Studio_Date_Parsing - Fatal编程技术网

如何在Java Android Studio中验证日、月和年,

如何在Java Android Studio中验证日、月和年,,java,android,android-studio,date,parsing,Java,Android,Android Studio,Date,Parsing,我有这段代码,但是runValidations没有检查日期、月份和年份是否正确。编译器没有显示任何错误或任何东西。我一遍又一遍地阅读代码,不知道如何修复此验证,我将非常感谢您的帮助 我已经尝试了我能想到的所有可能的事情,但我没有取得任何进展 { ActivityMainBinding binding; boolean isPasswordHidden = true; public static final String USER_EXTRA = "USER

我有这段代码,但是runValidations没有检查日期、月份和年份是否正确。编译器没有显示任何错误或任何东西。我一遍又一遍地阅读代码,不知道如何修复此验证,我将非常感谢您的帮助

我已经尝试了我能想到的所有可能的事情,但我没有取得任何进展

 {

    ActivityMainBinding binding;
    boolean isPasswordHidden = true;

    public static final String USER_EXTRA = "USER_EXTRA";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = ActivityMainBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());
        binding.button.setOnClickListener(this::runValidations);
        binding.ivHidden.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                isPasswordHidden = !isPasswordHidden;
                if (isPasswordHidden) {
                    binding.ivHidden.setImageResource(R.drawable.ic_baseline_visibility_off_24);
                    binding.etPassword.setTransformationMethod(new PasswordTransformationMethod());
                } else {
                    binding.ivHidden.setImageResource(R.drawable.ic_baseline_visibility_24);
                    binding.etPassword.setTransformationMethod(null);
                }
                binding.etPassword.setSelection(binding.etPassword.getText().length());
            }
        });
        binding.cbTerms.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                binding.button.setEnabled(isChecked);
            }
        });
    }


    public void runValidations(View view) {

        boolean isEverythingOk = verifyForEmptyField(binding.etName)
                && verifyForEmptyField(binding.etLastName)
                && verifyForEmptyField(binding.etMail)
                && verifyForEmptyField(binding.etPassword)
                && verifyForEmptyField(binding.etDays)
                && verifyForEmptyField(binding.etMonths)
                && verifyForEmptyField(binding.etYears)
                && validateEmailAddressField()
                && validatePasswordLength()
                && validateDay()
                && validateMonth()
                && validateYear();

        if (isEverythingOk) {
            Intent intent = new Intent(this, SuccessActivity.class);
            User user = new User(
                    getTrimmedText(binding.etName),
                    getTrimmedText(binding.etLastName),
                    getTrimmedText(binding.etMail),
                    getTrimmedText(binding.etPassword),
                    "", ""
            );
            intent.putExtra(USER_EXTRA, user);
            startActivity(intent);
            finish();
        }
    }


    private boolean verifyForEmptyField(EditText editText) {
        String fieldContent = getTrimmedText(editText);
        boolean isValid = !fieldContent.isEmpty();
        if (!isValid) {
            editText.setError(getString(R.string.error_empty_field));
        }
        return isValid;
    }

    private String getTrimmedText(EditText editText) {
        return editText.getText().toString().trim();
    }

    private boolean validateEmailAddressField() {
        boolean isValid = Patterns.EMAIL_ADDRESS.matcher(getTrimmedText(binding.etMail)).matches();
        if (!isValid) {
            binding.etMail.setError(getString(R.string.error_invalid_email));
        }
        return isValid;
    }

    private boolean validatePasswordLength() {
        String password = getTrimmedText(binding.etPassword);
        boolean isValid = password.length() >= 10;
        if (!isValid) {
            binding.etPassword.setError(getString(R.string.error_password_lenght));
        }
        return isValid;
    }

    private int parseETtoInt(EditText editText) {
        try {
            String content =getTrimmedText(editText);
            return Integer.parseInt(content);
        } catch (NumberFormatException e) {
            return -1;
        }
    }

    public boolean validateDay() {
        int valueD= parseETtoInt(binding.etDays);
        boolean isValid = (valueD <= 31 && valueD > 0);
        if (!isValid){
            binding.etDays.setError(getString(R.string.error_invalid_day));
        }
        return isValid;
    }

    public boolean validateMonth() {
        int valueM= parseETtoInt(binding.etMonths);
        boolean isValid = (valueM >=1 && valueM <= 12);
        if (!isValid){
            binding.etMonths.setError(getString(R.string.error_invalid_month));
        }
        return isValid;
    }

    public boolean validateYear() {
        int valueY= parseETtoInt(binding.etYears);
        boolean isValid = (valueY < 2021 && valueY > 1900);
        if (!isValid){
            binding.etYears.setError(getString(R.string.error_invalid_year));
        }
        return isValid;
    }

}
{
活性主键结合;
布尔值isPasswordHidden=true;
公共静态最终字符串USER\u EXTRA=“USER\u EXTRA”;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
binding=ActivityMainBinding.flate(getLayoutInflater());
setContentView(binding.getRoot());
binding.button.setOnClickListener(this::runValidations);
binding.ivHidden.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
isPasswordHidden=!isPasswordHidden;
如果(isPasswordHidden){
binding.ivHidden.setImageResource(R.drawable.ic\u基线\u可见性\u关闭\u 24);
binding.etPassword.setTransformationMethod(新的PasswordTransformationMethod());
}否则{
binding.ivHidden.setImageResource(R.drawable.ic_基线_可见性_24);
binding.etPassword.setTransformationMethod(null);
}
binding.etPassword.setSelection(binding.etPassword.getText().length());
}
});
binding.cbTerms.setOnCheckedChangeListener(新建CompoundButton.OnCheckedChangeListener()){
@凌驾
检查更改后的公共无效(复合按钮视图,布尔值已检查){
binding.button.setEnabled(已选中);
}
});
}
公共void运行验证(视图){
布尔值isEverythingOk=verifyForEmptyField(binding.etName)
&&verifyForEmptyField(binding.etLastName)
&&verifyForEmptyField(binding.etMail)
&&verifyForEmptyField(binding.etPassword)
&&verifyForEmptyField(binding.etDays)
&&verifyForEmptyField(binding.etMonths)
&&verifyForEmptyField(binding.etYears)
&&validateEmailAddressField()
&&validatePasswordLength()
&&validateDay()
&&validateMonth()
&&验证eyear();
如果(isEverythingOk){
Intent Intent=新的Intent(这个,SuccessActivity.class);
用户=新用户(
getTrimmedText(binding.etName),
getTrimmedText(binding.etLastName),
getTrimmedText(binding.etMail),
getTrimmedText(binding.etPassword),
"", ""
);
意图.额外输入(用户额外输入,用户);
星触觉(意向);
完成();
}
}
专用布尔值验证ForemptyField(EditText EditText){
String fieldContent=getTrimmedText(编辑文本);
布尔值isValid=!fieldContent.isEmpty();
如果(!isValid){
setError(getString(R.string.error_empty_field));
}
返回有效;
}
私有字符串getTrimmedText(EditText EditText){
返回editText.getText().toString().trim();
}
私有布尔validateEmailAddressField(){
boolean isValid=Patterns.EMAIL_ADDRESS.matcher(gettrimmetext(binding.etMail)).matches();
如果(!isValid){
binding.etMail.setError(getString(R.string.error\u无效的电子邮件));
}
返回有效;
}
私有布尔validatePasswordLength(){
字符串密码=gettrimmetext(binding.etPassword);
布尔值isValid=password.length()>=10;
如果(!isValid){
binding.etPassword.setError(getString(R.string.error_password_length));
}
返回有效;
}
私有int-parsetpoint(EditText-EditText){
试一试{
字符串内容=getTrimmedText(editText);
返回整数.parseInt(content);
}捕获(数字格式){
返回-1;
}
}
公共布尔validateDay(){
int value=parsetPoint(binding.etDays);
布尔值isValid=(值为0);
如果(!isValid){
binding.etDays.setError(getString(R.string.error\u invalid\u day));
}
返回有效;
}
公共布尔validateMonth(){
int valueM=parsetPoint(binding.etMonths);
布尔值isValid=(valueM>=1&&valueM 1900);
如果(!isValid){
binding.etYears.setError(getString(R.string.error_无效_年));
}
返回有效;
}
}

它运行名称、姓氏、邮件和密码的验证。除了日期之外的所有内容,运行avd我可以在日期上输入任何值,并且当我引入错误值时不会显示错误。

您应该使用,但如果您想使用EditText,我建议创建一个日历实例,并尝试将日期、月份和年份设置为该实例。
我不认为
布尔值是有效的=(值为0)是一个很好的日验证选项。并非所有月份都有31天。

分别验证年份、月份和日期不仅复杂而且容易出错。我建议您通过组合来自
binding.etyear
binding.etMonths
binding.etDays
的值来验证完整的日期字符串

演示:

import java.time.DateTimeException;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.ResolverStyle;
import java.util.Locale;

class Main {
    // Simulating year, month and day
    static String etYears = "2020";
    static String etMonths = "2";
    static String etDays = "23";

    public static void main(String[] args) {
        // Tests

        System.out.println(isValidDate());

        etDays = "30";
        System.out.println(isValidDate());

        etMonths = "13";
        etDays = "23";
        System.out.println(isValidDate());

        etYears = "1855";
        etMonths = "2";
        System.out.println(isValidDate());
    }

    static boolean isValidDate() {
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuu-M-d", Locale.ENGLISH)
                                            .withResolverStyle(ResolverStyle.STRICT);

        String strDate = etYears + "-" + etMonths + "-" + etDays;
        System.out.println(strDate);

        try {
            LocalDate date = LocalDate.parse(strDate, dtf);
            int year = date.getYear();
            return year < 2021 && year > 1900;
        } catch (DateTimeException e) {
            return false;
        }
    }
}
2020-2-23
true
2020-2-30
false
2020-13-23
false
1855-2-23
false
了解有关现代日期时间API的更多信息

注意:java.util
date-time API及其格式化API
SimpleDateFormat
已经过时且容易出错。建议完全停止使用,并切换到

  • 不管什么原因,如果你没有