Exception quand je lance mon application à partir d'Eclipse.

J'ai eu ce problème pendant près de 2 mois maintenant et ne peut pas le comprendre. Le problème est que, si ma demande est en cours d'exécution et je lance (réinstaller) ma demande d'Eclipse, je reçois un message d'erreur m'indiquant que ma demande a s'est écrasé " Malheureusement, a arrêté.'. Je remarque qu'il se produit également quand je le lance loin de mon PC/Eclipse, je pense qu'il se produit seulement après je n'ai pas l'exécuter pendant un certain temps.

Il ne se produit que si l'application est active dans la 3ème activité (BaseDiagramActivity) et puis j'ai exécutez à nouveau l'application à partir d'Eclipse. J'ai dépouillé essentiellement toutes les applications, sauf les 3 activités et Il est encore en cours.

J'ai cherché et cherché une solution à ce problème, mais ne peut pas trouver une bonne réponse ou celle qui s'applique à moi.

Il ne semble pas comme un matériel ou une version android question que je suis sur ce sur ma tablette (4.0.3) et mon téléphone (4.0.2, qui se passait avant la mise à jour 4.0.1). Sauf si bien sûr c'est un sandwich à la crème glacée bug.

Laissez-moi savoir si d'info plus est nécessaire.

L'exception (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

Le Code Android

LoadedApk.initializeJavaContextClassLoader() Ligne 362 semble être le délinquant

Ci-dessous sont les fichiers concernés:

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

il ne fait pas d'importance ce que cette activité est, l'exception se produit aussi longtemps qu'un tiers de l'activité est lancé (ou en cliquant sur le bouton ajouter sur 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>

Des informations supplémentaires

Quand j'ai démonté mon projet afin de demander une simple réponse, j'ai tout déplacé dans le paquet de l'espace de noms. Dans le projet il y a 5 espaces de noms, ils étaient toujours présents quand j'ai été le tester avec la version dépouillée cependant tout simplement pas appelé (comme ce que j'ai pu voir).

Voici les paquets:

  • [package] - logique générale
  • [package].activities - toutes les activités et les activités de base
  • [package].database - toutes les interactions avec la base de données
  • [package].models - modèles pour la sauvegarde/chargement de données
  • [package].renderables - objets dessinés à un canevas

J'ai essayé d'ajouter un "android:sharedUserId" attribut le manifeste et et il semblait ne rien les deux fois j'ai essayé. Lorsque j'ai commencé à enquêter sur ce que je suis venu à la conclusion que le partage des id d'utilisateur seulement appliquée à différents projets, pas de paquets différents.

Aussi je ne crois pas qu'il n'y a aucune interaction avec la base de données quand j'ai dépouillé tout bas. Le fait que la 3ème activité pourrait être n'importe quelle activité, même HomeActivity, c'était quelque chose à l'encontre de cette théorie.

Liens utiles

Mise à jour 1/11/2012

Dernier couple de jours, j'ai sauté en arrière dans ce projet, j'ai créé un nouveau projet dans Eclipse Juno (était sur Helios avant) et transféré tout à la main, de sorte que Eclipse et Android outils gérés presque tous le Manifeste de l'interaction, mais il est encore en cours. Je vais regarder ça un peu plus dans les prochains jours et la mise à jour si je trouve quoi que ce soit.

Pour info mon nouveau projet est de cibler les suivantes:

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

La nouvelle structure de projet a également toutes les activités dans le package racine maintenant (c'est à dire. [package], pas [package].les activités). Je suis également en utilisant le (nouveau?) la syntaxe pour afficher l'activité parent:

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

Il est également toujours en cours sur mon maintenant mis à jour Galaxy Nexus exécutant Jellybean 4.1.2.

  • Pouvez-vous fournir la simple application du code sur Github ou quelque part d'autre?
  • Je ne peux pas très facilement en ce moment car je viens de déménager et je suis coincé sans internet sur mon bureau (qui manque sans fil). À l'aide de mon téléphone à ce post. Je crois que le code devrait fonctionner si vous venez de créer ces fichiers dans un projet eclipse.
  • Essayez de reproduire ce comportement en Nid d'abeille ou du pain d'épice, c'est probablement une bug dans ICS si.
  • Indépendamment de savoir si cela fonctionne en 2.3 et 3.0, il ne sera pas vraiment résoudre le problème, cependant. Je n'ai même pas de planification sur le ciblage de moins de 4.0 de toute façon. l'Un des liens utiles semble cibler la version 8 minimum version du SDK.
  • Pourriez-vous s'il vous plaît vérifier à nouveau, puis message d'erreur logcat (qui, je pense, il y a plus d'après ... 11 more)? Ou pouvez-vous courir adb bugreport et joindre le fichier quelque part, puis me donner le lien?
  • ... 11 more est la dernière erreur/ligne rouge dans le logcat.
  • Une erreur courante quand il s'agit de l'interprétation des erreurs à partir de l'OS lui-même, c'est que souvent il y a un avertissement au-dessus de l'erreur dans le journal. Je voudrais faire défiler et voir si vous pouvez trouver une inhabituelle entrée de journal qui ne se produit que dans cette circonstance. Je les ai vus-être même au niveau de l'info, même si c'est rare. Il donne souvent l'indice qui est nécessaire. (Une telle entrée de journal est "Inattendu Reprise de l'Activité ... quand il est déjà là." M'a causé beaucoup de merde. Il fixe bien 🙂
  • Les avertissements ci-dessus à l'exception sont les suivants: TextLayoutCache : computeValuesWithHarfbuzz -- besoin de forcer un seul passage, ET dalvikvm (même PID) : threadid=1: thread sortir avec uncaught exception (groupe=0x40a621f8)

InformationsquelleAutor Daniel Imms | 2012-03-17