Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Excepción cuando ejecuto mi aplicación desde Eclipse

He estado teniendo este problema durante casi 2 meses y no puedo entenderlo. El problema es que si mi aplicación se está ejecutando y ejecuto (reinstalar) mi aplicación de Eclipse, recibo un mensaje de error que indica que mi aplicación se ha estropeado "Desafortunadamente, se ha detenido. Observo que también ocurre cuando lo corro lejos de mi PC / Eclipse, pienso que sucede solamente después de que no lo funcione por un rato.

Solo ocurre si la aplicación está activa en la 3ª actividad ( BaseDiagramActivity ) y luego ejecuto la aplicación de nuevo desde Eclipse. He eliminado básicamente toda la aplicación excepto las 3 actividades y todavía está sucediendo.

He buscado y buscado una solución a este problema, pero no puedo encontrar ninguna buena respuesta o una que se aplica a mí.

No parece un problema de hardware o versión de Android, ya que estoy corriendo esto en mi tableta (4.0.3) y mi teléfono (4.0.2, estaba sucediendo en 4.0.1 antes de la actualización). A menos que, por supuesto, es un bocadillo de sandwich de helado.

Déjeme saber si se necesita más información.

La excepción (Tag = AndroidRuntime)

 FATAL EXCEPTION: main java.lang.RuntimeException: Unable to instantiate application android.app.Application: java.lang.NullPointerException at android.app.LoadedApk.makeApplication(LoadedApk.java:482) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3938) at android.app.ActivityThread.access$1300(ActivityThread.java:123) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1185) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4424) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.NullPointerException at android.app.LoadedApk.initializeJavaContextClassLoader(LoadedApk.java:362) at android.app.LoadedApk.getClassLoader(LoadedApk.java:305) at android.app.LoadedApk.makeApplication(LoadedApk.java:474) ... 11 more 

El código de Android

LoadedApk.initializeJavaContextClassLoader () – La línea 362 parece ser el delincuente

A continuación se muestran los archivos relevantes:

AndroidManifest.xml

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="[my package]" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="14" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:name="HomeActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="LoadDiagramActivity" android:label="Load Diagram"></activity> <activity android:name="BaseDiagramActivity" android:label="Base Diagram"></activity> </application> </manifest> 

HomeActivity.java

 public class HomeActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.home); Button diagramButton = (Button)findViewById(R.id.diagram); diagramButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { startActivity(new Intent(HomeActivity.this, LoadDiagramActivity.class)); } }); } } 

LoadDiagramActivity.java

 public class LoadDiagramActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ActionBar actionBar = getActionBar(); actionBar.setDisplayHomeAsUpEnabled(true); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater menuInflater = getMenuInflater(); menuInflater.inflate(R.menu.load_diagram_menu, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: finish(); return true; case R.id.add_new_diagram: startActivity(new Intent(this, BaseDiagramActivity.class)); return true; default: return super.onOptionsItemSelected(item); } } } 

BaseDiagramActivity.java

En realidad no importa qué actividad es, la excepción se produce mientras una "tercera" actividad se inicia (o haciendo clic en el botón agregar en LoadDiagramActivity .

 public class BaseDiagramActivity extends Activity { } 

Home.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:id="@+id/diagram" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Diagram" /> </LinearLayout> 

Información Adicional

Cuando despojé mi proyecto para pedir una respuesta más sencilla, moví todo en el espacio de nombres del paquete. En el proyecto actual hay 5 espacios de nombres, que todavía estaban presentes cuando estaba probando con la versión despojada, sin embargo, no se llama (por lo que pude ver).

Aquí están los paquetes:

  • [package] – lógica general
  • [package].activities – todas las actividades y actividades básicas
  • [package].database – toda la interacción con la base de datos
  • [package].models – modelos para guardar / cargar datos
  • [package].renderables – objetos dibujados en un lienzo

He intentado agregar un atributo `android: sharedUserId 'al manifiesto y parece que no hizo nada las dos veces que lo intenté. Cuando estaba investigando esto, llegué a la conclusión de que el identificador de usuario compartido sólo se aplicaba a diferentes proyectos, no a paquetes diferentes.

También no creo que hubo ninguna interacción con la base de datos cuando me despojó de todo. El hecho de que la 3ª actividad pudiera ser cualquier actividad, incluso HomeActivity, era algo en contra de esta teoría.

Enlaces útiles

  • Stackoverflow: android.app.Application no se puede instanciar debido a NullPointerException
  • GreoCode android.app.LoadedApk en 4.0.1
  • Posibles condiciones de carrera?
  • Edición de Android # 25869

Actualización 1/11/2012

El último par de días he saltado de nuevo a este proyecto, he creado un nuevo proyecto en Eclipse Juno (estaba en Helios antes) y se transfirió todo de forma manual para que Eclipse y herramientas de Android manejó casi toda la interacción Manifiesto, pero todavía está ocurriendo . Voy a mirar un poco más en los próximos días y actualizar si encuentro algo.

FYI mi nuevo proyecto está dirigido a lo siguiente:

 <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="15" /> 

La nueva estructura del proyecto también tiene todas las actividades en el paquete raíz ahora (es decir, [paquete], no [paquete] .actividades). También estoy usando la sintaxis (nueva?) Para mostrar la actividad principal:

 <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="[my package].LoadDiagramActivity" /> 

También está ocurriendo en mi Galaxy Nexus que se está ejecutando en Jellybean 4.1.2.

  • Eclipse no muestra la ventana del administrador de Avd y el proyecto android
  • Exportar un proyecto eclipse como gradle
  • Actualizar a phonegap 3.3.0
  • ¿Qué IDE para Phonegap? ¿Eclipse es suficiente?
  • Error de carga de Eclipse soundpool
  • D'pad está deshabilitado en el emulador
  • ¿Por qué Android Eclipse constantemente actualiza las carpetas externas y toma forver?
  • ADT de Android: no fragment_main.xml, sólo activity_main.xml
  • 9 Solutions collect form web for “Excepción cuando ejecuto mi aplicación desde Eclipse”

    Trate de añadir una cosa más en el archivo de manifiesto, estoy seguro de que ya lo ha intentado.

     <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="[my package]" android:versionCode="1" android:versionName="1.0" android:sharedUserId="com.mj.app" > 

    Parece que en tu proyecto tienes varios PAQUETES, como com.package.p1 , com.package.p2 ,com.package.p3 ..

    Y mientras que comienza usted está en p1 y entonces se mueve encendido a p2 - p3 … y en ese momento usted intenta funcionarlo otra vez. .so el androide le da error.

    Si pone 13 en su minSdkVersion , debería funcionar.

    Ya sea que, o necesita setDisplayHomeAsUpEnabled(false) en el onCreate() de sus otras actividades.

    Ambas soluciones deberían funcionar.

    A partir del API de nivel 14 de acuerdo con la documentación , el setHomeButtonEnabled(true) ya no se hace por usted por defecto, y va a decir que

    El ajuste de la opción DISPLAY_HOME_AS_UP activará automáticamente el botón de inicio.

    Así que podemos inferir que setDisplayHomeAsUpEnabled(false) funciona de manera similar a setHomeButtonEnabled(false)

    Si no me equivoco, esto sólo sucede cuando reinstalamos la aplicación desde Eclipse Run-> As. Por lo tanto, es poco probable que suceda cuando un usuario actualiza a través de Play. Puedo decir esto con confianza, ya que me di cuenta de mi aplicación también con esta excepción durante la reinstalación a través de Eclipse, pero nada en Crittercism.

    Para solucionar esto, trabajé en la resolución de consumo de memoria de mi aplicación.

    1. Si sólo tiene 1 juego de estirar, entonces cambie eso. Crear un drawables-mdpi y copiar todo el archivo de la carpeta 1 drawables (drawables, drawable-ldpi). Si solo tiene 1 conjunto, Android lo redimensionará para su uso en pantallas más grandes, por lo que internamente ocupará demasiada memoria, y la limpieza de este tipo de memoria (mapa de bits) es propensa a errores. Suena loco, pero hace maravillas. No me creas, ejecútalo bajo Heap memoria uso reloj antes y después de este cambio, te darás cuenta de que su aplicación está tomando un 25% menos de memoria para un escenario común.
    2. Si está realizando alguna operación de mapa de bits, es posible que desee considerar la reducción de escala. Atleast cuando usted está fijando opciones usted definitivamente desea reducirlo. Compruebe aquí y aquí . Búsqueda o reducción de escala.
    3. Por último no te olvides de bitmap.recycle(); bitmap = null; bitmap.recycle(); bitmap = null; En su onDestroy y antes de todo System.exit (0).

    Android hace mucho trabajo de fondo, y la reinstalación es una expectativa abrupta de limpieza de la aplicación. La memoria no limpia puede causar problemas. Esta excepción es uno de esos internal . Así que no pienses en que sea sencillo.

    No has añadido el período a los nombres de tus actividades en el android:name de manifiesto android:name atributos de android:name . Quizás, esto causa el problema.

    Espere después de que su aplicación se bloquee cuando lo ejecute por segunda vez. La aplicación se iniciará después de la caída de nuevo. Esto sucede a veces conmigo. Si el mismo es el caso con u no se olvide de limpiar su proyecto cada vez antes de ejecutarlo.

    Al inspeccionar su código siento que está saltando para establecer "setContentView(rid)" en LoadDiagramActivity . Intente establecer la vista en onCreate() .

    Espero que esto te ayudará.

    Tienes que añadir "." Antes del nombre de la activity en Menifest .

    Me gusta esto

     <?xml version="1.0" encoding="utf-8"?> 

     <uses-sdk android:minSdkVersion="14" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:name=".HomeActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".LoadDiagramActivity" android:label="Load Diagram"></activity> <activity android:name=".BaseDiagramActivity" android:label="Base Diagram"></activity> </application> 

    Actualizo la actividad de su menifest. Compruébelo por favor…

    No hay nada malo con el código que nos has dado hasta ahora. Acabo de probarlo en un nuevo proyecto con el nombre del paquete com.test y funcionó perfectamente. La única cosa que agregué en los archivos era la declaración del paquete. (Y he añadido el load_diagram_menu.xml, por supuesto.)

    Si es posible, sería estupendo si pudiera darnos acceso al proyecto completo. Si el proyecto está funcionando en la computadora de otra persona, lo más probable es que Eclipse o el complemento Android Eclipse se estén portando mal. Una instalación limpia de Eclipse resolvería eso. (Aunque entiendo cómo estar fuera de línea podría hacer esto difícil. :-))

    Para ello, asegúrese de que se haya marcado la opción "Crear automáticamente" al limpiar el proyecto. (Proyecto -> Construir automáticamente)

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.