Ok je cherche juste quelque chose ici ..
Chaque fois que je suis dans mon application et que je change d'activités, LogCat rapporte une série d'avertissements:
02-04 14:42:36.524: WARN/Resources(1832): Converting to string: TypedValue{t=0x12/d=0x0 a=2 r=0x7f08002b}
02-04 14:42:36.524: WARN/Resources(1832): Converting to string: TypedValue{t=0x12/d=0x0 a=2 r=0x7f08002c}
02-04 14:42:36.524: WARN/Resources(1832): Converting to string: TypedValue{t=0x12/d=0x0 a=2 r=0x7f08002d}
D'autres applications ne montrent pas de tels avertissements. Est-ce une chose de compression pré-libéré/AAPT?
Vous utilisez une ressource BOOL dans laquelle une chaîne est attendue.
Vous pouvez trouver quelle ressource est utilisé de manière incorrecte en ouvrant votre fichier R.Java généré et en recherchant les identifiants de ressources à partir du message LOGCAT:
0x7f08002b
0x7f08002c
0x7f08002d
Tous les trois devraient provenir de votre fichier bool.xml (le "T = 0x12" dans le message d'avertissement signifie que les ressources sont type_int_boilean ).
Ensuite, trouvez où ces identifiants de ressources sont utilisés dans votre projet (probablement une mise en page XML, mais pourraient être n'importe où) et assurez-vous que les types correspondent.
Voici un exemple de TextView qui générerait ce message de journal. Si dans mes res/valeurs/bool.xml j'ai:
<resources>
<bool name="foo_flag">false</bool>
</resources>
Je peux m'en référer mal à partir d'un fichier XML de mise en page:
<TextView Android:id="@+id/foo"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="@bool/foo_flag"></TextView>
Lorsque j'exécute cette application, je vais obtenir le message d'avertissement car "Text" s'attend à une ressource à chaîne, et non à Bool (mon application apparaît comme prévu si l'indicateur est converti en la chaîne "False").
Ces avertissements ne se sont produits que lorsque une certaine option de développeur a été activée.
Paramètres de l'appareil> Options de développeur> Désactiver 'Activer la vue d'attribut Inspection'
Dans mon cas, le problème était dans ListPreference
valeur par défaut. Même si vous le tapez comme String
(par exemple "10"
) Il sera interprété comme int
puis converti en String
et donc se plaindre.
Par exemple, cela donnera un avertissement:
<ListPreference
Android:defaultValue="10"
...
/>
mais cela ne fera pas:
<ListPreference
Android:defaultValue="@string/ten"
...
/>
et définir @string/ten
dans strings.xml
comme:
<string name="ten" translatable="false">10</string>
Dumb, mais il se débarrasse de l'avertissement.
Problème dans Android:text="@+id/fooText
Essayez de changer de votre .xml ceci:
<TextView
Android:id="@+id/foo"
Android:text="@+id/fooText"/>
Pour ça:
<TextView
Android:id="@+id/foo"
Android:text=""/>