EditText 条件循环 Android Studio

EditText condition loop Android Studio

我有一个 EditText,我需要至少包含一个字符。 如果没有,我会提示 Toast 并要求用户重试。 问题是循环进入无穷大\ phone 被卡住了。 我认为这是一个简单的问题,但我不知道该怎么做。 我正在尝试从用户那里读取课程名称、成绩和分数。我需要在课程名称中至少包含一个字符。大概逻辑有问题。有什么提示吗?

public void readSubjectName() {
    grades.add(new Grade()); // Create new grade
    String tempSubject = inputLabel.getText().toString();
    /** If the Subject name does not contain any characters,
     *  assume it's bad, toast and ask again.
     */
    if (!(tempSubject.matches(".*[a-z].*"))) { // Subject Name does not contain any characters
        Toast.makeText(getApplicationContext(), "Please enter a valid course name", Toast.LENGTH_LONG).show();
        while (!(tempSubject.matches(".*[a-z].*"))) {
            Toast.makeText(getApplicationContext(), "Please enter a valid course name", Toast.LENGTH_LONG).show();
        }
    }
    grades.get(grades.size() - 1).setSubject(tempSubject); //Add subject
    inputLabel.setText(null);
    inputLabel.setHint("Enter Grade");
    subjectButton.setVisibility(View.INVISIBLE);
    gradeButton.setVisibility(View.VISIBLE);
}

试试这个代码


public void readSubjectName() {
    grades.add(new Grade()); // Create new grade
    String tempSubject = inputLabel.getText().toString();
    
    if (tempSubject.isEmpty()) { 
        Toast.makeText(getApplicationContext(), "Please enter a valid course name", Toast.LENGTH_LONG).show();


      //inputLabel.setError("Fill this field"); TODO: Check whether this works else display Toast Message
      inputLabel.requestFocus();

    }
    grades.get(grades.size() - 1).setSubject(tempSubject); //Add subject
    inputLabel.setText(null);
    inputLabel.setHint("Enter Grade");
    subjectButton.setVisibility(View.GONE);
    gradeButton.setVisibility(View.VISIBLE);
}

希望这对您有所帮助。随时要求澄清...

使用下面的代码,您可以评估用户输入的 string/text 的长度,并检查它是否符合您的标准,

       //read value from EditText to a String variable
        val tempSubject: String = inputLabel.text.toString()

        //check if the EditText have values or not
        if(tempSubject.trim().length>1) {
            Toast.makeText(applicationContext, "Message : "+tempSubject, Toast.LENGTH_SHORT).show()
        }else{
            Toast.makeText(applicationContext, "Please enter some message! ", Toast.LENGTH_SHORT).show()
        }

所以我弄清楚出了什么问题,我需要保持当前状态而不是移动到下一个状态,直到我获得正确的输入,使用简单的“else”语句:

        //check if the EditText have values or not
    if (!(tempSubject.matches(".*[a-z].*"))) {
        inputLabel.setError("Invalid name!");
        inputLabel.requestFocus();
    } else {  
        grades.get(grades.size() - 1).setSubject(tempSubject); //Add subject
        inputLabel.setText(null);
        inputLabel.setHint("Enter Grade");
        subjectButton.setVisibility(View.INVISIBLE);
        gradeButton.setVisibility(View.VISIBLE);
    }

我遗漏了 else 语句,其余代码不在条件范围内,因此代码继续执行。