Android - E/AndroidRuntime: FATAL EXCEPTION: main Error al hacer la validación de una cadena

 
Vista:

E/AndroidRuntime: FATAL EXCEPTION: main Error al hacer la validación de una cadena

Publicado por Luis Garcia (1 intervención) el 29/10/2022 18:36:44
Quiero validar el input de un editText. El problema viene cuando válido que no debe de haber una letra justo después de un espacio, esto pasa en el último if. Solo pasa eso con el último if, si lo borro, no me marca ningún error.

Este es el error que me marca:
[/b]2022-10-29 11:29:53.006 2256-2276/com.example.validacin I/PGA: hstInit: opened /dev/bstpgaipc: fd = 36
2022-10-29 11:29:53.006 2256-2276/com.example.validacin I/PGA: Attempting to create new SOCKET connection pid = 2256, tid = 2276
2022-10-29 11:29:53.007 2256-2276/com.example.validacin I/PGA: hstInitClientPgaIpc: Attempting to get GROUP2 cid
2022-10-29 11:29:53.008 2256-2276/com.example.validacin I/PGA: hstInitClientPgaIpc: data mapped to 0xa433b000 with size 4194304
2022-10-29 11:29:53.008 2256-2276/com.example.validacin I/PGA: New SOCKET connection: com.example.validacin (pid 2256, tid 2276)
2022-10-29 11:29:53.011 2256-2276/com.example.validacin I/OpenGLRenderer: Initialized EGL, version 1.4
2022-10-29 11:29:53.011 2256-2276/com.example.validacin D/OpenGLRenderer: Swap behavior 1
2022-10-29 11:29:56.809 2256-2261/com.example.validacin I/art: Do partial code cache collection, code=21KB, data=30KB
2022-10-29 11:29:56.809 2256-2261/com.example.validacin I/art: After code cache collection, code=21KB, data=30KB
2022-10-29 11:29:56.809 2256-2261/com.example.validacin I/art: Increasing code cache capacity to 128KB
2022-10-29 11:29:57.897 2256-2256/com.example.validacin D/AndroidRuntime: Shutting down VM
2022-10-29 11:29:57.897 2256-2256/com.example.validacin E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.validacin, PID: 2256
java.lang.IllegalStateException: Could not execute method for android:onClick
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:446)
at android.view.View.performClick(View.java:5653)
at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1219)
at android.view.View$PerformClick.run(View.java:22461)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6138)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:893)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:783)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:441)
at android.view.View.performClick(View.java:5653) 
at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1219) 
at android.view.View$PerformClick.run(View.java:22461) 
at android.os.Handler.handleCallback(Handler.java:751) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:154) 
at android.app.ActivityThread.main(ActivityThread.java:6138) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:893) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:783) 
Caused by: java.lang.StringIndexOutOfBoundsException: length=4; index=-1
at java.lang.String.charAt(Native Method)
at com.example.validacin.MainActivity.validar(MainActivity.java:68)
at com.example.validacin.MainActivity.validarNombre(MainActivity.java:35)
at java.lang.reflect.Method.invoke(Native Method) 
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:441) 
at android.view.View.performClick(View.java:5653) 
at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1219) 
at android.view.View$PerformClick.run(View.java:22461) 
at android.os.Handler.handleCallback(Handler.java:751) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:154) 
at android.app.ActivityThread.main(ActivityThread.java:6138) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:893) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:783) 
2022-10-29 11:29:57.897 2256-2256/com.example.validacin I/Process: Sending signal. PID: 2256 SIG: 9



Aquí está el XML:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:onClick="validarNombre"
tools:context=".MainActivity">

<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="Validación"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<EditText
android:id="@+id/etInput"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:digits="abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWQYZ ."
android:ems="10"
android:inputType="textPersonName"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView" />

<TextView
android:id="@+id/tvKey"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="TextView"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/etInput" />

<Button
android:id="@+id/bt1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:onClick="validarNombre"
android:text="Button"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tvKey" />

</androidx.constraintlayout.widget.ConstraintLayout>

Aquí está el Java:
package com.example.validacin;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

private TextView tvKey;
private Button bt1;
private EditText etInput;
private static String cadena = "";
private static Boolean Espacio = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvKey = (TextView) findViewById(R.id.tvKey);
bt1 = findViewById(R.id.bt1);
etInput = (EditText) findViewById(R.id.etInput);
}


public void validarNombre(View view){

validar();

}

public void validar(){

if(TextUtils.isEmpty(etInput.getText().toString())){

etInput.setError("Error: El campo de nombre no puede queda vacio");
return;

}

for(int i = 0; i <= etInput.getText().toString().length() - 1; i++){

cadena = etInput.getText().toString();

//Juan Manuel
if (cadena.length() > 1 && cadena.charAt(i) == ' ' && cadena.charAt(i - 1) == ' '){
etInput.setError("Error: No puede haber doble espacio en un nombre");
return;
}
//J . Manuel
if (cadena.length() > 1 && cadena.charAt(i) == '.' && cadena.charAt(i - 1) == ' '){
etInput.setError("Error: No puede haber un punto después de un espacio");
return;
}
//J..Manuel
if (cadena.length() > 1 && cadena.charAt(i) == '.' && cadena.charAt(i - 1) == '.'){
etInput.setError("Error: No puede haber dos puntos seguidos");
return;
}
//J.Manuel
if (cadena.length() > 1 && Character.isLetter(cadena.charAt(i)) && cadena.charAt(i - 1) == '.'){
etInput.setError("Error: Debe de haber un espacio después de un punto");
return;
}

}

Toast.makeText(this, "Nombre escrito", Toast.LENGTH_SHORT).show();
}
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder