【问题标题】:EditText Int number Validation for ID number 0-1000EditText Int number 验证 ID 号 0-1000
【发布时间】:2019-11-05 02:00:29
【问题描述】:

我正在做作业,而且我已经很孤单了。我在应用程序中的下一步是 * 客户 ID 应介于 0-1000 之间。如果用户输入任何大于 1000 的值,则需要显示错误消息。

我不知道该怎么做。我正在观看视频并访问其他网站以查看是否有类似的内容,但没有点击。到目前为止,这是我的代码。

String name, address;
    int custID= 0;

    EditText nameInput;
    EditText addressInput;
    EditText custIDInput;

    Button submitButton;



    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    nameInput = this.<EditText>findViewById(R.id.NameeditText);
    addressInput = this.<EditText>findViewById(R.id.addresseditText);
    custIDInput = this.<EditText>findViewById(R.id.CustIDeditText);
    submitButton = this.findViewById(R.id.SubmitButton);


    submitButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) throws IndexOutOfBoundsException {


            Intent i = new Intent(MainActivity.this, Customer.class);

            name = nameInput.getText().toString();
            address = addressInput.getText().toString();
            custID = Integer.valueOf(custIDInput.getText().toString());
            if(! custID > 0 && < 1000)
                custIDInput.setError("Error Customer ID: enter number 1-1000");

            i.putExtra("Value1", name);
            i.putExtra("Value2", custID);
            startActivity(i);
            finish();

有人可以解释我做错了什么吗?有什么我需要导入的吗? 谢谢!

【问题讨论】:

  • 从我看到的设置错误的条件来看,您输入的条件似乎无效。 (这应该只是客户 ID 超过 1000 的一种情况。您不必反转条件的结果 - 这不是反转多个条件的正确方法。)(PS 条件是否也说明错误如果输入的ID小于0,应该显示?)
  • 我猜不是...让我看看当我删除多余的条件时会发生什么。
  • 其次,请考虑格式化您的代码,使其更易于阅读。
  • 这样就修复了我收到的错误,但错误消息和约束仍然不起作用。
  • 顺便说一句,如果你不明白我的意思,本质上是检查custID 是否大于1000,如果是,则设置错误。 (或者,您还可以在条件语句中添加一个else 块,将错误设置为空,这样如果用户的输入在约束 0 - 1000 内,则不会显示错误。)

标签: android validation android-edittext int


【解决方案1】:

那是因为你的条件语句一开始就不对。

您指定的条件表明:

客户 ID 应介于 0-1000 之间。如果用户输入任何值超过 1000,那么您需要显示错误消息。 (重点是我的)

本质上,这意味着只有当用户输入大于 1000 的值时才会显示错误消息。这将转换为以下(抽象)代码:

if (input > 1000) {
    // Show your error message here
}

如果输入有效,您还应该隐藏错误。这样用户在输入有效输入时不会感到困惑,但仍会显示错误消息。这可以通过else 语句来完成:

if (input > 1000) {
    // Show your error message here
} else {
    // Hide your error message here or do whatever you want
}

希望这会有所帮助!

附:以下是代码在适应当前代码后的样子:

// ...
if (custID > 1000) {
    custIDInput.setError("Please enter a number between 0 and 1000");
} else {
    // Hide the error message
    custIDInput.setError(null);

    i.putExtra("Value1", name);
    i.putExtra("Value2", custID);
    startActivity(i);
    finish();
}

有关“关系运算符”(或条件运算符)含义的更多信息,请查看此guide from Trinket on "Conditionals and Logic"

【讨论】:

    【解决方案2】:

    在 onClick 中更改代码,如下所示。

    Intent i = new Intent(MainActivity.this, Customer.class);
    
        name = nameInput.getText().toString();
        address = addressInput.getText().toString();
        custID = Integer.valueOf(custIDInput.getText().toString());
    
        if(custID > 0 && custId <= 1000) {
            i.putExtra("Value1", name);
            i.putExtra("Value2", custID);
            startActivity(i);
            finish();
        } else {
           custIDInput.setError("Error Customer ID: enter number 1-1000");
        }
    

    【讨论】:

    • 如果您仔细阅读过这个问题,您会注意到客户 ID 的条件是 介于 0 和 1000 之间。这个表示0 包含在条件中。
    • 顺便说一下,请考虑说明您的代码与 OP 的代码有何不同以及它如何解决问题。
    • @MonicaBreitweiser 嘿,不要急于做开发之类的事情,仅仅看你提到的 YouTube 视频来学习和做一些事情会有很多限制。你被卡住,感到压力是很正常的。呼吸新鲜空气,找到学习安卓的正确方法。有很多书可以让你从 A 到 Z 学习 android。加油!
    • 谢谢。我不得不删除我之前的评论。但我感谢您的支持。
    【解决方案3】:

    首先创建这个类:

    import android.text.InputFilter;
    import android.text.Spanned;
    
    public class InputFilterMinMax implements InputFilter {
    
        private int min, max;
    
        public InputFilterMinMax(int min, int max) {
            this.min = min;
            this.max = max;
        }
    
        public InputFilterMinMax(String min, String max) {
            this.min = Integer.parseInt(min);
            this.max = Integer.parseInt(max);
        }
    
        @Override
        public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {   
            try {
                int input = Integer.parseInt(dest.toString() + source.toString());
                if (isInRange(min, max, input))
                    return null;
            } catch (NumberFormatException nfe) { }     
            return "";
        }
    
        private boolean isInRange(int a, int b, int c) {
            return b > a ? c >= a && c <= b : c >= b && c <= a;
        }
    }
    

    将这行代码添加到你的EditText(XML)

    android:inputType="number"
    

    将过滤器设置为 Kotlin/Java 文件中的 editText

    et.setFilters(new InputFilter[]{ new InputFilterMinMax("0", "1000")});
    

    【讨论】:

    • 请考虑解释您的代码与 OP 的代码有何不同以及它如何解决问题,而不仅仅是从其他地方复制和粘贴代码。
    猜你喜欢
    • 1970-01-01
    • 2021-09-28
    • 1970-01-01
    • 2013-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-24
    • 2017-03-08
    相关资源
    最近更新 更多