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
- stackoverflow: android.app.L'Application ne peut pas être instancié en raison de NullPointerException
- GreoCode android.app.LoadedApk sur 4.0.1
- Possible à condition de course?
- Android le numéro 25869
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 couriradb 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)
Vous devez vous connecter pour publier un commentaire.
Essayez d'ajouter une chose de plus dans le fichier de Manifeste, je suis sûr que vous avez déjà essayé..
Il semble que dans votre projet, vous disposez de plusieurs PAQUETS, comme
com.package.p1 , com.package.p2 ,com.package.p3
..Et lors du démarrage, vous êtes dans
p1
et se déplace ensuite surp2 - p3
...et à ce moment, vous essayez de l'exécuter à nouveau..donc le Android vous donne erreur.
sharedUserId
comme il doit avoir au moins une période dans le nom, j'ai remarqué lorsque vous essayez de nouveau aujourd'hui. Mon projet est en fait divisé en 5 paquets, que je vais expliquer plus en profondeur dans le fond de la question. J'ai des doutes sur cette même si, comme quand j'étais en posant la question, j'ai dépouillé la plupart des projets et de les mettre tous dans le projet de l'espace de noms et il a encore eu lieu. C'est essentiellement ce que l'exception dans le code android se plaint cependant.Si vous mettez
13
dans votreminSdkVersion
, il devrait fonctionner.Soit ça, ou vous avez besoin de
setDisplayHomeAsUpEnabled(false)
dans leonCreate()
de vos autres activités.Ces deux solutions doivent travailler.
De départ à l'API de Niveau 14 selon le la documentation, le
setHomeButtonEnabled(true)
n'est plus fait pour vous par défaut, et il continue à dire queDonc on peut en déduire que
setDisplayHomeAsUpEnabled(false)
fonctionne de la même manière quesetHomeButtonEnabled(false)
ActionBar
, l'ajout de laDISPLAY_HOME_AS_UP
drapeau, réglagesetDisplayHomeAsUpEnabled(false)
.J'ai encore quelques espoirs pour le SDK de la version que je n'ai pas la version 13 téléchargé pour l'instant donc je n'étais pas en mesure de cibler rien de moins que la 4.0Si je ne me trompe pas, cela se produit uniquement lorsque nous réinstaller l'application à partir d'Eclipse Exécuter->Comme. Donc, il est peu probable de se produire lorsqu'un utilisateur des mises à niveau par le Jeu. Je peux dire avec assurance, car j'ai remarqué que mon application trop avec cette exception au cours de réinstaller via Eclipse, mais rien sur Crittercism.
Pour remédier à cela, j'ai travaillé sur la résolution de la consommation de mémoire de mon application.
bitmap.recycle(); bitmap = null;
dans votre onDestroy et avant tout le Système.exit(0).Android fait beaucoup de travail de fond, et de la réinstallation est une brusque nettoyage de l'attente de l'application. La mémoire ne sont pas nettoyés peuvent causer des problèmes. Cette exception est l'un de ces
internal
ceux. Afin de ne pas penser à être simple.Vous n'avez pas ajouté de la période pour les noms de vos activités dans le manifeste du
android:name
attributs. Peut-être, ce qui provoque le problème.Attendre après que votre application se bloque lorsque u exécuter une deuxième fois. L'application sera lancé après le crash de nouveau. Cela arrive parfois avec moi. Si la même chose est le cas avec u n'oubliez pas de nettoyer votre projet à chaque fois avant u l'exécuter.
Par l'inspection de votre code, je vous sentez vous êtes ignorant à l'ensemble
"setContentView(rid)"
dansLoadDiagramActivity
. Merci d'essayer de paramétrage de l'affichage dansonCreate()
.Espère que cela va vous aider.
Vous devez ajouter "." avant le
activity
nom dansMenifest
.Comme ce
- Je mettre à jour votre menifest de l'activité. S'il vous plaît vérifier...
Il n'y a rien de mal avec le code que vous avez donné jusqu'à présent. Je l'ai juste essayé dans un nouveau projet avec le nom de package com.test et cela a fonctionné parfaitement. La seule chose que j'ai ajouté dans les fichiers ont été à la déclaration du package. (Et j'ai ajouté de l'load_diagram_menu.xml, bien sûr.)
Si possible, ça serait génial si vous pouviez nous donner accès à l'ensemble du projet. Si le projet est de travailler sur un autre ordinateur, il est probablement Eclipse ou Android plugin Eclipse qui se conduisent mal. Une nouvelle installation d'Eclipse résoudrait. (Même si je comprends comment le fait d'être en mode hors connexion peut rendre la tâche difficile. 🙂 )
Pour cela, assurez-vous d'avoir le "Construire Automatiquement" est cochée lors du nettoyage du projet. (Projet -> compiler Automatiquement)