Actualmente tengo 2 campos editText que están configurados en Tipo: Número donde el usuario puede ingresar un valor numérico, he agregado estos campos editText como una Cadena para pasar estos valores a una Base de datos SQL. Me preguntaba cómo podría agregar validación numérica a estos campos donde el usuario debe ingresar: Más que o igual a, así como menos que e igual a. Vea el ejemplo a continuación:

     String number = ((EditText)findViewbyId(R.id.text_numberExample)).getText().toString();
     // How would I validate where the user is required to input number values between a range
0
Kevin 11 feb. 2021 a las 13:16

4 respuestas

La mejor respuesta

Es una implementación de Java. Esta idea es muy similar a la de Android. Para Java, en lugar de usar ((EditText)findViewbyId(R.id.text_numberExample)).getText().toString(), uso Scanner para tomar entradas.

  • Después de tomar la entrada, verifique si es un número o una cadena (como "Hola"). Si es una cadena como Hello entonces, lanza una excepción. Del mismo modo, si es un número válido pero está fuera de su rango deseado, también arroja una excepción personalizada.

  • En ambos casos, obliga al usuario a realizar una entrada válida.

  • Ahora vuelve a convertir el valor de la cosa a string.

import java.util.Scanner;

public class StringToNumberWithValidation{

    public static void main(String[] args) {
        
        Scanner in = new Scanner(System.in); 
        boolean flag = true;
        Long number = null;
        while(flag){
            System.out.print("Insert Number Example: ");
            String numberString = in.next();
            
            try {
                number = Long.parseLong(numberString);
                numberValidator(number);
                flag = false;
            }catch(NumberFormatException ex) {
                System.out.println(ex.toString());
            }
        }
        
        System.out.println(number);

    }
    
    static void numberValidator(Long number) {
        Long min = (long) 10;
        Long max = (long) 100;
        if(number >= min && number <= max ) {
            return;
        }
        throw new NumberFormatException("Number Out of Range");
        
    }

}
0
Md. Kawser Habib 11 feb. 2021 a las 11:55

Probar esto

public class InputFilterMinMax implements InputFilter
{
    private final int min;
    private final int max;
    private final UtilityListener utilityListener;

    public InputFilterMinMax(int min, int max,UtilityListener utilityListener)
    {
        this.min = min;
        this.max = max;
        this.utilityListener = utilityListener;
    }

    @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;
            }
            else
            {
                utilityListener.getItem("Value cannot exceed " + max);
            }
        }
        catch (NumberFormatException ignored)
        {
            utilityListener.getItem("NumberFormatException");
        }
        return "";
    }

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

Aquí está el oyente

public interface UtilityListener
{
    void getItem(Object object);
}

Y en actividad

binding.editText.setFilters(new InputFilter[]{new InputFilterMinMax(1,10, object ->
        {
            String message = (String) object;

            Toast.makeText(MainActivity.this,message,Toast.LENGTH_SHORT).show();
        })});
0
Shashank 11 feb. 2021 a las 10:21

Puede obtener un valor int usando https: // kotlinlang .org / api / latest / jvm / stdlib / kotlin.text / to-int.html

Y luego verifique manualmente si este valor está en su rango

0
Kamil Jeglikowski 11 feb. 2021 a las 10:22

Primero haz una expresión regular en una cadena como esta

String limitValue = "[1-9]";

Luego usa si para que coincida

        if(number.matches(limitValue)){
            Log.v("OK","Number is in limit");
        }else{       
            Log.v("NOT OK","Number is not in limit");
        }
0
Aquib Ali 11 feb. 2021 a las 11:08