es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué no puedo asignar el valor correcto del resultado booleano encontrado en el programa a una variable booleana y verificar una condición con el resultado?

Estoy recibiendo el valor como verdadero al usar log.d en el logcat, pero cuando asigno el valor a una variable booleana, cambia a falso y también no puedo hacer la condición if con el valor ya que también se muestra como falso. Es decir, solo puedo obtener el valor como verdadero en el log, no sé cómo tomar el valor en una variable o verificar algunas condiciones. Este código se utiliza para validar un número de teléfono:

Log.d(“testi3”, “id ” + edit_number.getText());

if (number.isEmpty()) {
Log.d(“testi3”, “id vacío” + edit_number.getText());
edit_number.setError(getResources().getString(R.string.phone_error));
isPhoneValid = false;
} else {
Log.d(“testi3”, “id sino ” + edit_number.getText());

Pattern ptrn = Pattern.compile("[7-9][0-9]{9}");

Matcher match = ptrn.matcher(number);

Log.d("testi3", "id sino 1 " + (match.find() && match.group().equals(number)));
isPhoneValid = (match.find() && match.group().equals(number));
Log.d("testi3", "id sino válido" + isPhoneValid);

if ((match.find() && match.group().equals(number))) {
    Log.d("testi3", "id sino 2 " + (match.find() && match.group().equals(number)));
    isPhoneValid = true;
} else {
    Log.d("testi3", "id sino 3 " + (match.find() && match.group().equals(number)));
    edit_number.setError(getResources().getString(R.string.phone_error));
    isPhoneValid = false;
}

}

Este es el logcat al ingresar un número como entrada:

D/testi3: id 9048857563
D/testi3: id sino 9048857563
D/testi3: id sino 1 true
D/testi3: id sino válido false
D/testi3: id sino 3 false

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El logcat muestra que el valor de “isPhoneValid” es falso, a pesar de que el mensaje de registro justo antes muestra que el valor debería ser verdadero. Esto se debe a que el valor se reasigna a falso en el siguiente bloque if-else:

    si ((match.find() && match.group().equals(number))) {
        isPhoneValid = true;
    } else {
        edit_number.setError(getResources().getString(R.string.phone_error));
        isPhoneValid = false;
    }
    

    Para solucionar este problema, podrías eliminar por completo el bloque else, ya que “isPhoneValid” ya se establece en verdadero en la línea anterior:

    si ((match.find() && match.group().equals(number))) {
        isPhoneValid = true;
    }
    

    Alternativamente, si necesitas mantener el mensaje de error en el bloque else, podrías agregar una variable booleana separada para verificar si el número de teléfono es válido y solo establecer “isPhoneValid” en verdadero si esa variable también es verdadera:

    boolean isNumberValid = (match.find() && match.group().equals(number));
    si (isNumberValid) {
        isPhoneValid = true;
    } else {
        edit_number.setError(getResources().getString(R.string.phone_error));
        isPhoneValid = false;
    }
    

Comments are closed.