Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.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
如何在Android Studio/Java中限制输入到EditText中的整数值_Java_Android - Fatal编程技术网

如何在Android Studio/Java中限制输入到EditText中的整数值

如何在Android Studio/Java中限制输入到EditText中的整数值,java,android,Java,Android,我设置了一个editText,用户只能输入一个整数值。然后将该值发送到API。问题是,如果值太高,服务器就会过载(Heroku问题)。 我想知道是否有一种方法可以限制可以输入到editText中的值。例如,用户只能输入1-800之间的值 很明显,我不能限制数值的位数,例如3位数,因为这将允许数值高达999 还有另一个问题有待解决,不过答案是,Q似乎没有提出一个优雅的解决方案,而是将不同的错误代码合并在一起 以下是editText的当前MainActivity和xml 活动\u main.xml

我设置了一个editText,用户只能输入一个整数值。然后将该值发送到API。问题是,如果值太高,服务器就会过载(Heroku问题)。 我想知道是否有一种方法可以限制可以输入到editText中的值。例如,用户只能输入1-800之间的值

很明显,我不能限制数值的位数,例如3位数,因为这将允许数值高达999

还有另一个问题有待解决,不过答案是,Q似乎没有提出一个优雅的解决方案,而是将不同的错误代码合并在一起

以下是editText的当前MainActivity和xml

活动\u main.xml

<EditText
        android:id="@+id/editText2"
        android:layout_width="274dp"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="278dp"
        android:ems="10"
        android:hint="Enter number of tweets..."
        android:inputType="number" />

对于从编辑文本中提取数据的按钮,使用onclicklistener。

您只需具备此条件即可检查输入的值是否在1到800之间

 EditText editText2 = findViewById(R.id.editText2);
 String tweetNo = editText2.getText().toString();
 int result = Integer.parseInt(tweetNo);   // convert String to int 

 if (result >= 1 && result <= 800){
      // do whatever you want
 }
EditText-editText2=findViewById(R.id.editText2);
字符串tweetNo=editText2.getText().toString();
int result=Integer.parseInt(tweetNo);//将字符串转换为int

如果(result>=1&&result您可以为您的
EditText
InputFilter
设置自定义
InputFilter
定义在
EditText
中允许的值,在您的情况下,我们需要定义一个只接受
0
800
范围内的值的筛选器。定义筛选器类如下:

public class CustomRangeInputFilter implements InputFilter {
    private double minValue;
    private double maxValue;

    public CustomRangeInputFilter(double minVal, double maxVal) {
        this.minValue = minVal;
        this.maxValue = maxVal;
    }

    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dStart, int dEnd) {
        try {
            // Remove the string out of destination that is to be replaced
            String newVal = dest.toString().substring(0, dStart) + dest.toString().substring(dEnd, dest.toString().length());
            newVal = newVal.substring(0, dStart) + source.toString() + newVal.substring(dStart, newVal.length());
            double input = Double.parseDouble(newVal);

            if (isInRange(minValue, maxValue, input)) {
                return null;
            }
        } catch (NumberFormatException e) {
            e.printStackTrace();
        }
        return "";
    }

    private boolean isInRange(double a, double b, double c) {
        return b > a ? c >= a && c <= b : c >= b && c <= a;
    }
}

您可以使用InputFilter来限制该值

        editText2.setFilters(new InputFilter[]{new InputFilter() {
        @Override
        public CharSequence filter(CharSequence charSequence, int i, int i1, Spanned spanned, int i2, int i3) {
            try{
                int val=Integer.parseInt(spanned.toString()+charSequence.toString());
                if(MIN<=val&&val<=MAX)
                    return null;
            }catch (NumberFormatException e){
            }
            return "";
        }
    }});
editText2.setFilters(new InputFilter[]{new InputFilter(){
@凌驾
公共CharSequence筛选器(CharSequence CharSequence,int i,int i1,带跨距,int i2,int i3){
试一试{
int val=Integer.parseInt(span.toString()+charSequence.toString());

如果(min)您可以使用微调器而不是文本视图,然后在其上设置最小值和最大值吗?如果我找不到优雅的解决方案,这是一个选项。我喜欢edittext的想法,但如果需要,我肯定会走这条路,如果可能的话“然而,Q中的答案似乎并没有提出一个优雅的解决方案,而是不同错误代码片段的合并“如果是,请解释为什么这个问题中给出的答案不正确work@JohnJoe据报道,该线程中超过一半的答案都有下面的人的错误。这很有效,因为我实现了它。谢谢你。我想补充一下,我也尝试过这个,效果很好。谢谢你的输入
editText.setFilters(new InputFilter[]{new CustomRangeInputFilter(0f, 800.0f)});
        editText2.setFilters(new InputFilter[]{new InputFilter() {
        @Override
        public CharSequence filter(CharSequence charSequence, int i, int i1, Spanned spanned, int i2, int i3) {
            try{
                int val=Integer.parseInt(spanned.toString()+charSequence.toString());
                if(MIN<=val&&val<=MAX)
                    return null;
            }catch (NumberFormatException e){
            }
            return "";
        }
    }});