Question

Après avoir reçu soit un appel téléphonique ou faire un (et d'autres interruptions non documentées) ma demande obtient une NullPointerException lors de la reprise de mon activité. Quelqu'un peut-il me expliquer où il est et / ou comment y remédier? Quand mon activité reprend, il appelle onCreate il semble, et il essaie d'exécuter quelque chose qui est nul après la reprise. Comment puis-je éviter onCreate () d'être appelé?

Mon activité semble mettre fin lorsque j'appuie sur le bouton d'appel, parce que lorsque je tente de déboguer cette erreur, la déconnexion du débogueur.

EDIT:

Alors, comment puis-je gérer processus est tué -> onCreate ()? J'ai des activités A -> B -> C -> D, et je presse en arrière tout le chemin à A, il n'y a pas de problème. Mais si je commence un autre programme, ou un autre programme vient au premier plan, D tombe en panne, puis se bloque C, puis se bloque B, puis se plante!

EDIT:

I résolu B, C, D en panne. Ce fut parce que la classe où je stockées les variables statiques a été détruite pour libérer des ressources, et mes activités devenaient variables nulles.

Mais quand je reviens à A, je reçois un ClassCastException:

08-13 16:52:10.456: ERROR/AndroidRuntime(6048): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.bookcessed.booksearch/com.bookcessed.booksearch.activities.ChooseProviderActivity}: java.lang.ClassCastException: android.view.AbsSavedState$1
08-13 16:52:10.456: ERROR/AndroidRuntime(6048):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
08-13 16:52:10.456: ERROR/AndroidRuntime(6048):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
08-13 16:52:10.456: ERROR/AndroidRuntime(6048):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
08-13 16:52:10.456: ERROR/AndroidRuntime(6048):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
08-13 16:52:10.456: ERROR/AndroidRuntime(6048):     at android.os.Handler.dispatchMessage(Handler.java:99)
08-13 16:52:10.456: ERROR/AndroidRuntime(6048):     at android.os.Looper.loop(Looper.java:123)
08-13 16:52:10.456: ERROR/AndroidRuntime(6048):     at android.app.ActivityThread.main(ActivityThread.java:4627)
08-13 16:52:10.456: ERROR/AndroidRuntime(6048):     at java.lang.reflect.Method.invokeNative(Native Method)
08-13 16:52:10.456: ERROR/AndroidRuntime(6048):     at java.lang.reflect.Method.invoke(Method.java:521)
08-13 16:52:10.456: ERROR/AndroidRuntime(6048):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
08-13 16:52:10.456: ERROR/AndroidRuntime(6048):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
08-13 16:52:10.456: ERROR/AndroidRuntime(6048):     at dalvik.system.NativeStart.main(Native Method)
08-13 16:52:10.456: ERROR/AndroidRuntime(6048): Caused by: java.lang.ClassCastException: android.view.AbsSavedState$1
08-13 16:52:10.456: ERROR/AndroidRuntime(6048):     at android.widget.ProgressBar.onRestoreInstanceState(ProgressBar.java:944)
08-13 16:52:10.456: ERROR/AndroidRuntime(6048):     at android.view.View.dispatchRestoreInstanceState(View.java:6138)
08-13 16:52:10.456: ERROR/AndroidRuntime(6048):     at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:1209)
08-13 16:52:10.456: ERROR/AndroidRuntime(6048):     at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:1209)
08-13 16:52:10.456: ERROR/AndroidRuntime(6048):     at android.view.View.restoreHierarchyState(View.java:6117)
08-13 16:52:10.456: ERROR/AndroidRuntime(6048):     at com.android.internal.policy.impl.PhoneWindow.restoreHierarchyState(PhoneWindow.java:1466)
08-13 16:52:10.456: ERROR/AndroidRuntime(6048):     at android.app.Activity.onRestoreInstanceState(Activity.java:843)
08-13 16:52:10.456: ERROR/AndroidRuntime(6048):     at android.app.Activity.performRestoreInstanceState(Activity.java:815)
08-13 16:52:10.456: ERROR/AndroidRuntime(6048):     at android.app.Instrumentation.callActivityOnRestoreInstanceState(Instrumentation.java:1096)
08-13 16:52:10.456: ERROR/AndroidRuntime(6048):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2641)
08-13 16:52:10.456: ERROR/AndroidRuntime(6048):     ... 11 more

Voici mon onCreate ():

super.onCreate(savedInstanceState);
        tempLayout = new RelativeLayout(ChooseProviderActivity.this);
        ProgressBar tempProgress = new ProgressBar(ChooseProviderActivity.this);
        tempProgress.setIndeterminate(true);
        tempProgress.setId(1); //I suspect this is the problem
        RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        lp.addRule(RelativeLayout.CENTER_IN_PARENT);
        tempLayout.addView(tempProgress, lp);
        setContentView(tempLayout);

C'est là que je pense que les mensonges de problème:

tempProgress.setId(1); //I suspect this is the problem
Était-ce utile?

La solution

Juste pour la clarification des autres, vous n'avez pas besoin de assign ID de Views que vous instancier dans le code. Donc, vous êtes code devrait fonctionner avec juste la

ProgressBar tempProgress = new ProgressBar(ChooseProviderActivity.this);
tempProgress.setIndeterminate(true);
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
lp.addRule(RelativeLayout.CENTER_IN_PARENT);
tempLayout.addView(tempProgress, lp);
setContentView(tempLayout);

de Id ne sont principalement lors de la configuration de l'ID dans des fichiers XML, vous attribuez un ID de chaîne et la R.java est ensuite compilé, et attribue chaque ressource un numéro d'identification. Pas tout à fait vrai ! Voir modifier

EDIT

Comme superjos noté dans les commentaires, vous faites de besoin lorsque vous travaillez avec ID dispositions relatives. Consultez la documentation sur RelativeLayout.LayoutParams.addRule (int, int) pour

de quand vous avez besoin ID.

FIN EDIT

Comme ça ...

LinearLayout ll = new LinearLayout(SomeClass.this);
ll.setOrientation(VERTICAL);
TextView tv = new TextView(SomeClass.this);
EditText et = new EditText(SomeClass.this);
ll.add(tv);
ll.add(et);

Cela aura un textView ci-dessus une vue EditText. Dans l'autre cas ... faire

ll.add(et);
ll.add(tv);

placera le EditText CI-DESSUS la TextView. ID de n'ont absolument rien à voir avec la façon dont ils sont disposés à l'écran.

Autres conseils

Découvrez cette image pour voir comment et quand l'os appellera votre application.  text alt

Votre application se termine pour une raison quelconque, c'est pourquoi onCreate est appelé. Vous devez enregistrer l'état d'application / CV pour être en mesure de gérer cela correctement. Jetez un oeil à cette et développeurs référence

Peut-être que votre application utilise trop de mémoire si Android OS, il tue afin d'obtenir suffisamment de mémoire pour une autre activité.

Vous pouvez essayer à nouveau et ne vont pas à un appel ou tout processus pendant que votre application est en cours de chargement. Attendez jusqu'à ce qu'il définit.

Pourquoi ne pas essayer et passer outre toutes les fonctions de base qui sont utilisées au cours du cycle de vie de l'activité. utiliser la figure adb logcat avec log.v où votre erreur est INTERVENUES. Mettez un journal après chaque ligne dans la fonction dans laquelle l'application se bloque.

Aussi ce appelez-vous? vous appelez d'un émulateur à l'autre? Je n'ai pas eu un problème avec le chat journal existant dans un tel cas.

J'utilisais une classe avec des variables statiques et appelant .getStoredStaticVariable() et .saveStoredStaticVariable() et quand je voudrais essayer de le récupérer, il serait nul, probablement parce que la classe a été détruite pour libérer des ressources.

EDIT: Ce ne fut en partie la solution. La solution au ClassCastException() changeait

tempProgress.setId(1);

à un nombre peu susceptible d'être utilisé par le système:

tempProgress.setId(6346346);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top