如何限制在Android Studio / Java

时间:2019-03-23 13:42:09

标签: java android

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

不好意思,我不能通过数字(例如3个数字)来限制该值,因为这样最多可以允许999。

对此还存在另一个问题,但是Q中的答案似乎并没有提出一种优雅的解决方案,而是将不同的错误代码合并在一起。

这是editText的当前MainActivity和xml。

activity_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" />

mainActivity.Java

EditText editText2 = findViewById(R.id.editText2);
String tweetNo = editText2.getText().toString();

还带有一个onclicklistener按钮,该按钮也可以从editText提取数据。

3 个答案:

答案 0 :(得分:3)

您只需要具备此条件,即可检查输入的值是否在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
 }

答案 1 :(得分:2)

您可以使用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 "";
        }
    }});

答案 2 :(得分:0)

您可以为InputFilter设置自定义EditTextInputFilter定义了EditText内部允许的值,在您的情况下,我们需要定义一个过滤器,该过滤器仅接受0800范围内的值。像这样定义过滤器类:

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;
    }
}

然后,您通过EditText方法在onCreate上设置过滤器:

editText.setFilters(new InputFilter[]{new CustomRangeInputFilter(0f, 800.0f)});