2010-04-09 4 views
37

Lors du démarrage de mon application, je reçois l'avertissement suivant dans Logcat:Android: Comment retrouver l'origine d'une InflateException?

04-09 10:28:17.830: WARN/WindowManager(52): Exception when adding starting window 
04-09 10:28:17.830: WARN/WindowManager(52): android.view.InflateException: Binary XML file line #24: Error inflating class <unknown> 
04-09 10:28:17.830: WARN/WindowManager(52):  at android.view.LayoutInflater.createView(LayoutInflater.java:513) 
04-09 10:28:17.830: WARN/WindowManager(52):  at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56) 
04-09 10:28:17.830: WARN/WindowManager(52):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:563) 
04-09 10:28:17.830: WARN/WindowManager(52):  at android.view.LayoutInflater.inflate(LayoutInflater.java:385) 
04-09 10:28:17.830: WARN/WindowManager(52):  at android.view.LayoutInflater.inflate(LayoutInflater.java:320) 
04-09 10:28:17.830: WARN/WindowManager(52):  at android.view.LayoutInflater.inflate(LayoutInflater.java:276) 
04-09 10:28:17.830: WARN/WindowManager(52):  at com.android.internal.policy.impl.PhoneWindow.generateLayout(PhoneWindow.java:2153) 
04-09 10:28:17.830: WARN/WindowManager(52):  at com.android.internal.policy.impl.PhoneWindow.installDecor(PhoneWindow.java:2207) 
04-09 10:28:17.830: WARN/WindowManager(52):  at com.android.internal.policy.impl.PhoneWindow.getDecorView(PhoneWindow.java:1395) 
04-09 10:28:17.830: WARN/WindowManager(52):  at com.android.internal.policy.impl.PhoneWindowManager.addStartingWindow(PhoneWindowManager.java:818) 
04-09 10:28:17.830: WARN/WindowManager(52):  at com.android.server.WindowManagerService$H.handleMessage(WindowManagerService.java:8794) 
04-09 10:28:17.830: WARN/WindowManager(52):  at android.os.Handler.dispatchMessage(Handler.java:99) 
04-09 10:28:17.830: WARN/WindowManager(52):  at android.os.Looper.loop(Looper.java:123) 
04-09 10:28:17.830: WARN/WindowManager(52):  at com.android.server.WindowManagerService$WMThread.run(WindowManagerService.java:531) 
04-09 10:28:17.830: WARN/WindowManager(52): Caused by: java.lang.reflect.InvocationTargetException 
04-09 10:28:17.830: WARN/WindowManager(52):  at android.widget.FrameLayout.<init>(FrameLayout.java:79) 
04-09 10:28:17.830: WARN/WindowManager(52):  at java.lang.reflect.Constructor.constructNative(Native Method) 
04-09 10:28:17.830: WARN/WindowManager(52):  at java.lang.reflect.Constructor.newInstance(Constructor.java:446) 
04-09 10:28:17.830: WARN/WindowManager(52):  at android.view.LayoutInflater.createView(LayoutInflater.java:500) 
04-09 10:28:17.830: WARN/WindowManager(52):  ... 13 more 
04-09 10:28:17.830: WARN/WindowManager(52): Caused by: android.content.res.Resources$NotFoundException: Resource is not a Drawable (color or path): TypedValue{t=0x2/d=0x1010059 a=-1} 
04-09 10:28:17.830: WARN/WindowManager(52):  at android.content.res.Resources.loadDrawable(Resources.java:1677) 
04-09 10:28:17.830: WARN/WindowManager(52):  at android.content.res.TypedArray.getDrawable(TypedArray.java:548) 
04-09 10:28:17.830: WARN/WindowManager(52):  at android.widget.FrameLayout.<init>(FrameLayout.java:91) 
04-09 10:28:17.830: WARN/WindowManager(52):  ... 17 more 

Mon application commence par l'écran de démarrage suivant:

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:windowBackground="@color/white" android:background="@color/white" 
    android:layout_width="fill_parent" android:layout_height="fill_parent" 
    android:foregroundGravity="center"> 

    <ImageView android:id="@+id/ImageView01" 
     android:layout_width="fill_parent" android:layout_height="fill_parent" 
     android:adjustViewBounds="true" android:scaleType="centerInside" 
     android:src="@drawable/splash" android:layout_gravity="center" /> 


</ScrollView> 

Splash est l'image qui est affichée dans l'écran de démarrage. J'ai ces quatre dossiers avec pour stocker dessinables dans mon application:

/res/drawable-hdpi
/res/drawable-LDPI
/res/drawable-mdpi
/res/drawable-nodpi

l'image de démarrage a sa propre version dans les trois premiers d'entre eux et est affichée correctement. La suppression de la propriété src à partir d'ImageView supprime l'image mais pas l'exception.

Je suis un peu perdu avec où chercher la cause de l'exception. Je ne sais même pas si c'est vraiment un problème dans ce fichier de disposition, etc.

Comment allez-vous trouver la cause de cet avertissement?

+0

Eh bien, chercher un fichier qui a 24 lignes 'ligne de fichier XML # 24' – Pentium10

+6

Presque tous mes fichiers de mise en page sont plus longs que 24 lignes. – Janusz

+0

J'ai rencontré un problème similaire lors de la définition d'un nondrawable (dimention dans mon cas) sur un attribut de style qui attendait un drawable. Je m'attendrais à ce que le constructeur (XML sanitiser?) Vous avertisse avant qu'une construction se produise. – Diederik

Répondre

52

J'ai eu la même erreur exacte. La seule ligne xml 24 qui avait un sens était mon manifeste d'application qui se trouvait être la balise fermante pour l'application. Je l'ai tracé jusqu'à mon thème personnalisé que j'ajoutais pour l'application - je ne définissais pas le parent du style. Tout ce que je devais faire était d'ajouter parent = "android: Theme" à mon style et mon erreur est partie.

<style name="MyTheme" parent="android:Theme"> 
... 
</style> 
1
04-09 10:28:17.830: WARN/WindowManager(52): Caused by: android.content.res.Resources$NotFoundException: Resource is not a Drawable (color or path): TypedValue{t=0x2/d=0x1010059 a=-1 

Cette ligne est le cadeau. Le système n'est pas satisfait de l'une de vos ressources, probablement une ressource 'src', probablement android:src="@drawable/splash".

+0

J'ai supprimé la propriété src et les deux propriétés d'arrière-plan à la fois sans succès maintenant l'écran de démarrage est vide mais l'exception est toujours là. – Janusz

+0

Eesh. OK, l'étape suivante, essayez de supprimer la balise ImageView entière pour voir si c'est quelque chose dans cette balise causant le problème. –

+1

Fait aussi. Pas d'aide. Je pense que cela peut être un autre fichier XML. Comme le fichier définissant les styles pour l'ensemble de l'application, etc, mais je ne sais pas où chercher. – Janusz

0

L'erreur est sur la ligne 24 de votre fichier XML. Que contient cette ligne? Par l'apparence du message d'erreur

android.view.InflateException: Binary XML file line #24: Error inflating class <unknown> 

Vous utilisez une classe personnalisée et n'avez pas défini correctement quelque chose. Par exemple, avez-vous défini le nom du package correctement? Peut-être que son constructeur n'est pas formaté? Il faudrait voir le fichier XML, plus précisément la ligne 24, pour pouvoir donner plus d'informations.

+0

Le premier écran qui s'affiche après l'apparition de l'exception est l'écran d'accueil et ce fichier xml ne comporte pas 24 lignes. Et le binaire devant le XML me dit que je ne trouverai rien à une ligne 24 dans mes fichiers XML. – Janusz

+0

Je ne sais pas pourquoi il spécifie 'binary' avant de dire que c'est la ligne de fichier XML # 24, mais que * est * la ligne avec le problème dedans. Je viens d'introduire une erreur délibérée dans un de mes fichiers XML (renommé une vue personnalisée en quelque chose qui n'existait pas) et j'ai reçu un journal d'exception similaire au vôtre. Il a dit 'android.view.InflateException: ligne de fichier XML binaire # 90: erreur gonflement de la classe (mypackage.myclass ...)'. Donc, vous devez déterminer quel fichier XML il ouvre, puis regardez la ligne 24. Par exemple, avez-vous une autre activité sous votre écran de démarrage? –

+0

Désolé, je voulais ajouter plus de détails sur mon message d'erreur. Il a signalé la ligne avec la faute comme étant # 90, et c'était la ligne exacte avec le problème - je l'ai compté à la main. Ensuite, le numéro de ligne a changé correctement lorsque j'ai modifié le fichier et déplacé les choses. Nous savons donc qu'il y a une ligne 24 dans l'un de vos fichiers qui cause des problèmes, même si la cause principale est ailleurs. S'il y a une autre activité visible sous votre écran de démarrage, il peut y avoir une erreur gonflant le fichier XML pour celui-là. –

1

J'ai rencontré une erreur similaire lors de l'exécution sur un émulateur 2.0. J'ai utilisé une version plus récente de l'API (version 7, 2.1-update1) et cela a fonctionné.

2

J'ai eu le même problème, et c'était parce que j'ai passé le contexte d'application au lieu du contexte d'activité.

0

Je sais que c'est un peu en retard mais j'ai passé toute la journée à essayer de comprendre celui-ci et enfin avec l'aide de this SO question que j'ai réalisé un fichier XML dans l'exemple que j'essayais d'utiliser une fonction API et Lint ne l'attrapaient pas car le fichier n'avait pas changé. Dès que j'ai fait une modification aléatoire sur le fichier XML et enregistré le fichier, l'erreur sur une API plus tard apparut.

0

Après tant de recherche intense sur la recherche de la réponse que la raison pour laquelle App se bloque et pourquoi sa ne représente pas le logcat

Je viens de remplacer ce

android:configChanges="orientation|keyboardHidden" 

à

android:configChanges="keyboardHidden|orientation|screenSize" 

dans l'étiquette d'activité.

Questions connexes