Arreglar Java.Lang.IllegalStateException de Android: no se pudo ejecutar el método de la actividad
-
Reproduzca el error
java.lang.IllegalStateException: no se pudo ejecutar el método de la actividad
-
Causa del error
java.lang.IllegalStateException: no se pudo ejecutar el método de la actividad
-
Solucione el error
java.lang.IllegalStateException: no se pudo ejecutar el método de la actividad
Este tutorial nos lleva a través de la demostración del error java.lang.IllegalStateException: no se pudo ejecutar el método de la actividad
al crear una aplicación de Android en Java. Esto también analiza el motivo de este error y proporciona la solución para resolverlo.
Reproduzca el error java.lang.IllegalStateException: no se pudo ejecutar el método de la actividad
Código de ejemplo:
package com.example.npe;
import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.*;
public class MainActivity extends Activity implements OnClickListener {
EditText ipAddressField;
TextView scanOut;
TextView portResults;
EditText startPort;
EditText stopPort;
protected void onCreate(Bundle instanceState) {
super.onCreate(instanceState);
setContentView(R.layout.activity_main);
ipAddressField = (EditText) findViewById(R.id.ip_address_field);
ipAddressField.getText();
scanOut = (TextView) findViewById(R.id.scan_out);
Button scanButton = (Button) findViewById(R.id.scanButton);
scanButton.setOnClickListener(this);
}
public void onClick(View view) {
Editable host = ipAddressField.getText();
switch (view.getId()) {
case R.id.scanButton:
try {
String pingCommand = "ping -c 5 " + host;
String pingOutput = "";
Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec(pingCommand);
BufferedReader bufferedReader =
new BufferedReader(new InputStreamReader(process.getInputStream()));
String str;
while ((str = bufferedReader.readLine()) != null) {
System.out.println(str);
scanOut.setText(str + "\n"
+ "\n");
pingOutput += str;
scanOut.setText("/n" + pingOutput);
}
bufferedReader.close();
} // try
catch (IOException exception) {
System.out.println(exception);
}
break;
default:
break;
}
}
public void OnClickPort(View view) {
switch (view.getId()) {
case R.id.button1:
int rangeOfStartPort = Integer.parseInt(startPort.getText().toString());
int rangeOfStopPort = Integer.parseInt(stopPort.getText().toString());
for (int j = rangeOfStartPort; j <= rangeOfStopPort; j++) {
try {
Socket serverSocket = new Socket("192.168.0.1", j);
Toast.makeText(getApplicationContext(), "Port that is in use: " + j, Toast.LENGTH_LONG)
.show();
serverSocket.close();
} catch (Exception exception) {
exception.printStackTrace();
}
System.out.println("Port that is not in use: " + j);
}
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.activity_main, menu);
return super.onCreateOptionsMenu(menu);
}
}
Hemos escrito este código simple para hacer que la aplicación sea semi-útil.
Básicamente estamos en un minuto tomando bits útiles del código Java (ping A, exploración de puertos). Luego, los agregamos a nuestra aplicación, pero cuando la ejecutamos, genera el siguiente error en tiempo de ejecución.
Error de descripción:
FATAL EXCEPTION: main
java.lang.IllegalStateException: Could not execute method of the activity
¿Por qué tenemos este molesto error? Consulte la siguiente sección para averiguar el posible motivo.
Causa del error java.lang.IllegalStateException: no se pudo ejecutar el método de la actividad
Este error es causado por NullPointerException
, que genera la IllegalStateException
en una cadena de excepción. Por lo tanto, es esencial saber lo suficiente sobre null
, NullPointerException
y IllegalStateException
para descubrir por qué ocurre este error.
El null
es una palabra clave muy conocida entre los programadores informáticos. Es un literal para variables de referencia o tipos de datos, por ejemplo, Matrices
, Enumeraciones
, Interfaces
y Clases
.
La NullPointerException
es una excepción en tiempo de ejecución que ocurre cuando la aplicación intenta recuperar una referencia de objeto, lo que significa acceder a métodos con un valor nulo
. Mirando hacia atrás en nuestro programa, podemos ver que ninguna variable se inicializa con un valor nulo
.
El punto importante es que el valor nulo
se almacena automáticamente en una variable de referencia cada vez que lo declaramos pero no lo inicializamos. Los tipos de datos de referencia contienen un valor nulo
como valor predeterminado si no se inicializan durante el proceso de declaración.
Por otro lado, la IllegalStateException
es una excepción en tiempo de ejecución que muestra que el método ha sido llamado o invocado en un momento ilegal o incorrecto.
Ahora sabemos que el error es causado por NullPointerException
, que genera la IllegalStateException
en una cadena de excepción. Entonces, averigüemos cómo arreglar esto.
Solucione el error java.lang.IllegalStateException: no se pudo ejecutar el método de la actividad
Al inicio de la clase MainActivity.java
, tenemos dos variables llamadas startPort
y stopPort
de tipo EditText
que no hemos inicializado pero declarado. Significa que su valor predeterminado es nulo
en el momento en que intentamos ejecutar las siguientes líneas de código.
Código de ejemplo:
int rangeOfStartPort = Integer.parseInt(startPort.getText().toString());
int rangeOfStopPort = Integer.parseInt(stopPort.getText().toString());
La razón por la que aparece el error java.lang.IllegalStateException: no se pudo ejecutar el método de la actividad
es que estamos tratando de acceder a las variables de referencia de tipo EditText
, que contiene null
. Entonces, necesitamos inicializar startPort
y stopPort
dentro del método onCreate()
usando findViewById()
de la siguiente manera.
Código de ejemplo:
startPort = (EditText) findViewById(R.id.write_start_field_here);
stopPort = (EditText) findViewById(R.id.write_stop_field_here);
El método findViewById()
tomará el valor id
del componente como parámetro y ayuda a localizar un componente que está presente en la aplicación de Android. Otra solución es agregar un bloque try-catch
de la siguiente manera.
Código de ejemplo:
try {
int rangeOfStartPort = Integer.parseInt(startPort.getText().toString());
int rangeOfStopPort = Integer.parseInt(stopPort.getText().toString());
} catch (Exception ex) {
ex.printStackTrace();
}
Usando el bloque try-catch
, podemos atrapar
la NullPointerException
y ejecutar nuestra aplicación sin que se bloquee. Aquí, escribimos solo ese fragmento de código dentro del bloque try
que puede generar una excepción.
Mientras que el bloque catch
se encarga de manejar esa excepción que se produce en el bloque try
y reanuda la ejecución desde allí. Recuerde, después de ejecutar el bloque catch
, el programa no vuelve al bloque try
.
Es por eso que solo escribimos esas líneas de código en el bloque try
, lo que puede resultar en excepciones.
Artículo relacionado - Java Error
- Arreglar Java fue iniciado por el código de salida devuelto = 1
- Arreglar JAVA_HOME no se puede determinar a partir del error de registro en R
- Arreglar java.io.IOException: No queda espacio en el dispositivo en Java
- Arreglar Java.IO.NotSerializableException en Java
- Arreglar Java.Lang.NoClassDefFoundError: No se pudo inicializar el error de clase