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 se produit uniquement si l'application est active dans la 3ème activité (BaseDiagramActivity
) puis-je exécuter 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() de la Ligne de 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 pour une toile
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
Depuis quelques 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.