web-dev-qa-db-fra.com

Android: Comment retracer l'origine d'une exception InflateException?

Lors du démarrage de mon application, l'avertissement suivant apparaît dans Logcat:

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 apparaît dans l'écran de démarrage. J'ai ces quatre dossiers avec pour stocker les drawables 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 premières et est affichée correctement . La suppression de la propriété src de 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 s'il s'agit vraiment d'un problème dans ce fichier de mise en page, etc. 

Comment feriez-vous pour trouver la cause de cet avertissement? 

39
Janusz

J'ai eu la même erreur exacte. La seule ligne XML 24 qui ait du sens était mon manifeste d’application, qui se trouvait être la balise de fermeture de l’application. Je l'ai tracé jusqu'à mon thème personnalisé que j'avais ajouté pour l'application - je ne définissais pas le parent du style. Tout ce que j'avais à faire, c'était d'ajouter parent = "Android: Theme" à mon style et mon erreur s'est envolée.

<style name="MyTheme" parent="Android:Theme">
...
</style>
52
Garrett

J'ai eu le même problème, et c'est parce que j'ai transmis le contexte de l'application au lieu du contexte de l'activité.

2
Eng.Fouad

J'ai eu 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é.

1
Nada
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".

1
Jim Blackler

Je sais que c'est un peu tard, mais j'ai passé toute la journée à essayer de comprendre celui-ci et finalement, avec l'aide de this SO, j'ai réalisé qu'un fichier XML dans l'exemple que j'essayais utilisait un fonctionnalité d'une API ultérieure et Lint ne l'a pas interceptée car le fichier n'avait pas changé. Dès que j'ai effectué une édition aléatoire sur le fichier XML et que j'ai enregistré le fichier, l'erreur concernant une API ultérieure est apparue.

0
Gravitoid

Après tant de recherches mouvementées pour trouver la réponse, pourquoi App se bloque et pourquoi il ne montre pas le logcat

Je viens de remplacer ce

Android:configChanges="orientation|keyboardHidden"

à

Android:configChanges="keyboardHidden|orientation|screenSize"

dans la balise d'activité.

0
Ahmad Arslan

L'erreur est à la ligne 24 de votre fichier XML. Que contient cette ligne? À 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 quelque chose correctement. 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 autour de la ligne 24, pour pouvoir donner plus d’informations.

0
Steve Haley