web-dev-qa-db-fra.com

Android ressources Convertir en chaîne TypedValue Avertissement

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?

52
DJC

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").

55
Mike

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'

60
Tobrun

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.

0
lenooh

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=""/>
0
Kit Kat