java.lang.RuntimeException: no se puede instanciar la actividad ComponentInfo


151

Intenté ejecutar un código de muestra Al iniciar la aplicación en el emulador de Android 1.5, obtuve estos errores ... ¿Alguien tiene alguna pista ...?

ERROR de LogCat:

01-13 02:28:08.392: ERROR/AndroidRuntime(2888): FATAL EXCEPTION: main
01-13 02:28:08.392: ERROR/AndroidRuntime(2888): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.s.android.test/com.s.android.test.MainActivity}: java.lang.ClassNotFoundException: com.s.android.test.MainActivity in loader dalvik.system.PathClassLoader[/data/app/com.s.android.test-2.apk]
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1544)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1638)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:928)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.os.Looper.loop(Looper.java:123)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.ActivityThread.main(ActivityThread.java:3647)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at java.lang.reflect.Method.invokeNative(Native Method)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at java.lang.reflect.Method.invoke(Method.java:507)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at dalvik.system.NativeStart.main(Native Method)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888): Caused by: java.lang.ClassNotFoundException: com.s.android.test.MainActivity in loader dalvik.system.PathClassLoader[/data/app/com.s.android.test-2.apk]
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1536)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     ... 11 more
01-13 02:28:08.407: WARN/ActivityManager(112):   Force finishing activity com.s.android.test/.MainActivity

Editar Este error le sucede a la mayoría de los principiantes, lo importante es que debe agregar todas sus actividades en el archivo de Manifiesto.


gracias Dan Breslau ... Se ve mejor ahora ... ¿cómo hacer eso?
rahul

1
Lo siento chicos ... lo siento por perder su tiempo ... Me olvidé de agregar la nueva clase al archivo de Manifiesto ...
rahul

1
la actualización de todas mis herramientas (eclipse y sdk manager) lo arregló para mí, así como también agregué la biblioteca de soporte de Android al proyecto
Hayden Thring

tengo este problema, mira este stackoverflow.com/questions/30473270/…
DanialAbdi

Respuestas:


137

Es un problema de su intención.

Por favor agregue su Activityen su AndroidManifest.xml.

Cuando desee realizar una nueva actividad, debe registrarla en su AndroidManifest.xml.


44
Tengo una clase que no extiende la actividad, solo contiene algunas funciones comunes; pero sigo teniendo esta excepción; ¿por qué?
Manoj Kumar

En mi proyecto dice que la clase no es pública cuando se mira el android: nombre en el archivo xml. Cuando agrego public antes de clase en la actividad principal, la aplicación se ejecuta sin problemas. Extraño.
Codebeat

tuve este problema en una aplicación nativa que estaba desarrollando .. he añadido otro método en la clase de actividad, y empecé a recibir este error .. para mí un lugar limpio + reconstruir resuelto ..
ashishsony

66
Otra opción es que su actividad está en el manifiesto, pero se declara como abstract(cometí ese error durante la refactorización y el mensaje de error no está ayudando mucho).
Czechnology

59

Es posible que esté intentando encontrar la vista anterior, onCreate()que es incorrecta.

public class MainActivity extends Activity {

  ImageView mainImage = (ImageView) findViewById(R.id.imageViewMain); //incorrect

  @Override
  protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
  }
  ...
}

2
Wooo, gracias hombre. Eres un salvavidas. Es bastante tonto pero muchas gracias. Me había estado persiguiendo durante una semana.
2015

estaba cometiendo el mismo error;)
Sumit Jha

El mismo error aquí también. Gracias
Pooja

53

Hay otra forma de obtener una excepción java.lang.RuntimeException: no se puede instanciar la actividad ComponentInfo excepción y esa es la actividad que está intentando iniciar es abstracta . Cometí este estúpido error una vez y es muy fácil pasarlo por alto.


13
Además, la Actividad debe ser pública (este fue mi error).
djjeck

Lamento molestarte dos años después, pero me preguntaba por qué no puedes comenzar una actividad abstracta.
BenjaminFranklin

2
@BenjaminFranklin Una clase abstracta significa que no está completa, le faltan partes. Prefijar una clase con la palabra clave abstract significa que no se puede instanciar directamente, sino solo a través de la herencia: y otra clase que implementa las características faltantes de la clase abstracta.
Kit10

Ya heredé la clase abstracta pero aún no puedo trabajar. ¿Podría explicar más?
Mohammedsalim Shivani

53

En mi caso, olvidé agregar la biblioteca de Google Maps

<application>
    ....

    <uses-library android:name="com.google.android.maps" />
</application>

Además, compruebe que no le falta el punto anterior antes de la ruta de actividad

<activity android:name=".activities.MainActivity"/>

2
¡Gracias, @Maragues! ¡Era el mismo problema! Resolviste mi problema. :)
cmcromance

27

Imagen

También sucede debido a este problema. Desmarqué los frascos que debían exportarse al apk y sucedió lo mismo. Marque los frascos que su aplicación necesita ejecutarse.


Es importante ver este problema y probar cada componente de dependencia correctamente. Por ejemplo, en Android Studio (o Intellij IDEA) seleccione el alcance correcto para las dependencias (Proporcionado, Compilar, ...). En mi caso, cambia Proporcionado a Compilar y funciona bien.
dayanruben

15

También encontré este problema, pero de una manera ligeramente diferente. Aquí estaba mi escenario:

Detalle de la aplicación:

  • Usando ActionBarSherlock como biblioteca
  • Usando android-support-v4-r7-googlemaps.jar en la biblioteca ActionBarSherlock para poder usar un "fragmento de mapa" en mi proyecto principal
  • Agregué el jar a la ruta de compilación de mi proyecto principal
  • Incluido <uses-library android:name="com.google.android.maps" />en los manifiestos tanto del proyecto de la biblioteca como de mi proyecto principal (¿esto puede no ser necesario en la biblioteca?)
  • El manifiesto en el proyecto primario tenía la definición de actividad adecuada y todas las propiedades apropiadas.
  • No tenía una actividad abstracta ni ninguna de las otras trampas que he visto en Stack Overflow relacionadas con este problema.

Sin embargo, todavía encontré el error descrito en la publicación original y no pude evitar que desapareciera. Sin embargo, el problema era ligeramente diferente en un aspecto:

  • Solo afectó una nueva instalación de la aplicación en mi dispositivo. Cada vez que la aplicación se instala por primera vez, recibo el error precedido por varias "advertencias" de: No se puede resolver la superclase de FragmentActivity
  • Esas advertencias se remontan a la biblioteca ActionBarSherlock
  • La aplicación se forzaría a cerrarse y bloquearse.
  • Si inmediatamente reconstruí y volví a implementar la aplicación, funcionó bien.
  • La única vez que se bloqueó fue en una instalación totalmente nueva. Si desinstalé la aplicación, la desarrollé y volví a implementar desde Eclipse, se bloqueará. Construir / implementar por segunda vez, funcionaría bien.

Cómo lo arreglé:

  • En el proyecto de la biblioteca ActionBarSherlock, agregué android-support-v4-r7-googlemaps.jar a la ruta de compilación
  • Este paso solo no solucionó el problema

  • Una vez que el jar se agregó a la ruta de compilación, tuve que cambiar el orden en la pestaña Ruta de compilación de Java> Orden y exportación: configuré el JAR en el primer elemento de la lista (fue el último después de los elementos / src y / gen )

  • Luego reconstruí y volví a implementar la aplicación en mi dispositivo; funcionó como se esperaba en una nueva instalación. Solo para estar seguro, lo desinstalé nuevamente 2-3 veces y lo reinstalé, aún funcionó como se esperaba.

Esto puede ser un error total de novato, pero pasé bastante tiempo investigando las publicaciones y mi código para resolverlo, por lo que espero que pueda ser útil para otra persona. Puede que no solucione todas las situaciones, pero en este caso particular, eso terminó siendo la solución a mi problema.


¡Gracias! Esto funcionó para mí cuando obtuve este problema al usar el ejemplo de google admob sdk "adcatalog" y recibí este error. Una nota importante es marcar las casillas de verificación junto a las bibliotecas. En mi caso, soporte y tarros admobsdk.
jsmars

14

Esto podría no ser relevante para la pregunta real, pero en mi caso, intenté implementar Kotlin y me quedé fuera apply plugin: 'kotlin-android'. El error ocurrió porque no pudo reconocer MainActivity como un archivo .kt.

Espero que ayude a alguien.


1
También agregue classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$KOTLIN_VERSIONen build.gradle principal
Rajkiran

11

Este error también puede ser el último signo de un error tonto (como cuando quiero decir tos, como cuando un amigo mío que me mostró su código una vez) donde intentan ejecutar código fuera de un método como intentar hacer esto :

SQLiteDatabase db = openOrCreateDatabase("DB", MODE_PRIVATE, null); //trying to perform function where you can only set up objects, primitives, etc

@Override
public void onCreate(Bundle savedInstanceState) {
....
}

En vez de esto:

SQLiteDatabase db;

@Override
public void onCreate(Bundle savedInstanceState) {
db = openOrCreateDatabase("DB", MODE_PRIVATE, null);
....
}

1
Enorme ayuda. Solucioné mis problemas y me llevó a crear mi primera aplicación de Android completamente funcional
TheUnCola

7

Eliminé este problema eliminando la carpeta Biny Gendel proyecto (que vuelve automáticamente cuando se construirá el proyecto) y luego limpiando el proyecto de -> Menú -> Proyecto -> limpiar.

Gracias.


6

En mi caso no he configurado el setContentView(R.layout.main);

Si crea una nueva clase, no olvide establecer esto en el onCreate(Bundle savedInstanceState)método.

He cometido este estúpido error varias veces.


6

Simplemente limpie su proyecto de trabajo o reinicie eclipse. Luego ejecuta tu proyecto. funcionará.


Muchas veces esto ha sucedido ... Ahora no puede resolver un archivo IADL, que probablemente sea la raíz del problema y eclipse se estaba compilando en base a archivos antiguos ... así que recuerde limpiar, reiniciar y compilar niños ... .
Hunter-Orionnoir

6

Para mí, la cadena de mi paquete AndroidManifest.xmlera incorrecta (copiada de un tutorial). Asegúrese de que la cadena del paquete en este archivo sea la misma que donde se encuentra su actividad principal, por ej.

 package="com.example.app"

Una manera fácil de hacerlo es abrir el archivo AndroidManifest.xml en la pestaña "Manifiesto" y escribirlo en el cuadro de texto junto a Paquete, o usar el botón Examinar.

Además, la cadena del paquete para mi actividad era incorrecta, p. Ej.

<activity android:name="com.example.app.MainActivity" android:label="@string/app_name">

(Estúpidamente) recibí el mismo error semanas después cuando cambié el nombre de mi paquete. Si hace esto, asegúrese de actualizar también el AndroidManifest.xmlarchivo.


5

Ok, tengo bastante experiencia en el iPhone pero soy nuevo en Android. Recibí este problema cuando tenía:

Button infoButton = (Button)findViewById(R.id.InfoButton);

esta línea de código anterior:

@Override
public void onCreate (Bundle savedInstanceState) {
}

Puede ser que estoy privado de sueño: P


2
También tengo falta de sueño
Oz Mayt

3

Recientemente encontré esto con una nueva reinstalación de Eclipse. Resulta que el nivel de cumplimiento de mi compilador se estableció en Java 1.7 y el proyecto requirió 1.6.

En Eclipse: Proyecto -> Propiedades -> Compilador Java -> Cumplimiento JDK


2

Tengo este problema y lo solucionó configurando la propiedad "modo de lanzamiento" de la actividad.


2

Otra razón de este problema puede ser una biblioteca que falta.

Vaya a Propiedades -> Android y compruebe que agrega las bibliotecas correctamente


1
También verifique que las bibliotecas agregadas tengan una marca de verificación en ellas en Propiedades del proyecto -> Ruta de compilación de Java -> Ordenar y exportar
Phil

2

Tuve el mismo problema, pero tenía mi actividad declarada en el archivo Manifiesto, con el nombre correcto.

Mi problema era que no tenía que importar bibliotecas de terceros en una carpeta "libs", y necesitaba hacer referencia a ellas en mi proyecto (clic derecho, propiedades, Java Build Path, bibliotecas, agregar jar ...).


2

Esto puede suceder si su clase de actividad está dentro de un paquete predeterminado. Lo arreglé moviendo la clase de actividad a un nuevo paquete. y cambiando el manifest.xml

antes de

activity android:name=".MainActivity" 

después

activity android:name="new_package.MainActivity"

Gracias. eso fue todo.
Stephane

2

En mi caso, estaba tratando de inicializar los componentes (UI) incluso antes de que onCreatese llamara a la Actividad.

Asegúrese de que sus componentes de la interfaz de usuario estén inicializados / vinculados en el onCreatemétodo después desetContentView

NB: este es mi primer error al aprender la programación de Android.


2

Para mí fue diferente de cualquiera de los anteriores,

La actividad se declaró como abstracta, por eso se da el error. Una vez que lo eliminó, funcionó.

Más temprano

     public abstract class SampleActivity extends AppcompatActivity{
     }

Después de la eliminación

     public class SampleActivity extends AppcompatActivity{
     }

1

Esto me sucede con bastante frecuencia cuando uso el NDK. Descubrí que es necesario para mí hacer un "Clean" en Eclipse después de cada vez que hago un ndk-build. Espero que ayude a cualquiera :)


1

Este error también ocurre cuando usa ActionBarActivitypero no le asignaAppCompat estilo.

Para solucionar esto, simplemente configure el estilo principal de sus aplicaciones en Theme.AppCompatuno como este:

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light">
    <!-- Customize your theme here. -->
</style>

Bom trabalho @Ostkontentitan! funcionou para mim, obrigado.
Emerson Barcellos

1

Haga clic derecho en proyecto> propiedades> android> e intente con una versión diferente del androide anterior que estaba haciendo con android 4.4, luego cambié a android 4.3 y funcionó.


1

Tuve el mismo problema (no se puede crear una instancia de actividad):

PRIMERA razón:

Estaba accediendo

Camera mCamera;
Camera.Parameters params = mCamera.getParameters();

antes de

mCamera = Camera.open();

Entonces, la forma correcta de hacerlo es abrir primero la cámara y luego acceder a los parámetros.

SEGUNDA razón: declara tu actividad en el archivo de manifiesto

<activity android:name=".activities.MainActivity"/>

TERCERA razón: declara el permiso de la cámara en tu archivo de manifiesto.

<uses-feature android:name="android.hardware.Camera"></uses-feature>
<uses-permission android:name="android.permission.CAMERA" />

Espero que esto ayude


1

En mi caso, estaba tratando de incrustar el SDK de Facebook y tenía la ID de aplicación incorrecta ; Por lo tanto, el error estaba apareciendo. En su archivo de manifiesto, debe tener los metadatos adecuados:

<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebook_app_id" />

1

Si tiene Android Studio 2.3.3 y Android Studio 3.0.0 instalados, entonces el cambio entre los dos programas para el desarrollo causará este error. Esto se debe a que existen situaciones en las que las clases admitidas en un programa no son compatibles con el otro y viceversa. Es importante mantener la coherencia en la versión de Android Studio que se utiliza para desarrollar un proyecto.


1

Como se sugiere djjecken el comentario en esta respuesta, no puse el publicmodificador para mi clase.

Debería ser

public class MyActivity extends AppCompatActivity {

Puede ayudar a algunos como yo.


1

He intentado toda la solución anterior pero nada funciona para mí. después de que acabo de agregar extendactividad en lugar de AppCompatActivitytrabajar bien.

usado

public class MainActivity extends Activity  

en vez de

public class MainActivity extends AppCompatActivity 

No sé qué problema real fue eso.


0

Esto me sucedió cuando intenté ejecutar un Activity2.2 que usaba importaciones de Honeycomb que no estaban disponibles en versiones anteriores de Android y que tampoco estaban incluidas en el paquete de soporte de v4.


0

Su nueva actividad agregar AndroidManifest.xmlcomo".NewActivity"

 </activity>        
    <activity android:name=".NewActivity" />
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.