android studio Come identificare dove il codice non è corretto, se ricevo l'avviso Conversione in stringa: TypedValue?




logcat viewer (3)

Ecco l'estratto di LogCat:

04-04 19:51:51.270: INFO/ActivityManager(57): Starting activity: Intent { cmp=com.example.app/.Preferences }
04-04 19:51:51.710: WARN/Resources(1081): Converting to string: TypedValue{t=0x10/d=0x0 a=-1}
04-04 19:51:51.740: WARN/Resources(1081): Converting to string: TypedValue{t=0x10/d=0x0 a=-1}
04-04 19:51:51.761: WARN/Resources(1081): Converting to string: TypedValue{t=0x10/d=0x79e a=-1}
04-04 19:51:51.800: WARN/Resources(1081): Converting to string: TypedValue{t=0x10/d=0x5a0 a=-1}
04-04 19:51:51.810: WARN/Resources(1081): Converting to string: TypedValue{t=0x10/d=0x5 a=-1}
04-04 19:51:51.830: WARN/Resources(1081): Converting to string: TypedValue{t=0x10/d=0xa a=-1}
04-04 19:51:51.840: WARN/Resources(1081): Converting to string: TypedValue{t=0x10/d=0xa a=-1}
04-04 19:51:51.860: WARN/Resources(1081): Converting to string: TypedValue{t=0x10/d=0x1e a=-1}
04-04 19:51:51.870: WARN/Resources(1081): Converting to string: TypedValue{t=0x10/d=0x1e a=-1}
04-04 19:51:53.450: INFO/ActivityManager(57): Displayed activity com.example.app/.Preferences: 2061 ms (total 2061 ms)

Ho avuto questo problema quando ho abilitato l'opzione "Abilita controllo attributi vista" all'interno di:

Settings > Developer Options > Debugging

Una volta disattivata l'impostazione, il dispositivo ha interrotto lo spamming logcat con questi avvisi.


Il TypedValue che ottieni da logcat può essere interpretato in questo modo:

  • t ==> type ( 0x10 = TYPE_INT_DEC )
  • d ==> i dati effettivi (da interpretare come specificato da t )
  • a ==> Ulteriori informazioni su dove il valore proviene; solo impostato per le stringhe.
  • r ==> ID risorsa finale (non impostato se hai passato un valore letterale)

Quindi suppongo che devi cercare interi che hai messo dove si aspettavano le stringhe.


Anche questo problema mi dava fastidio; Ho scoperto che gli avvisi logcat provengono da android:defaultValue , non le <item> nell'array. Puoi risolvere questi messaggi creando voci di stringa in un file xml (io uso /xml/constants.xml, ma la convenzione di denominazione dipende da te e non ha importanza) come segue:

 <resources>
      <string name="someValueA">12345</string>
      <string name="someValueB">0</string>
      <string name="someValueC">6789</string>
 </resources>

Anche se quei valori sono numeri interi, dal momento che li stai dichiarando come stringhe, Android li considera come stringhe, quindi non viene generato alcun avviso di logcat.

Nel codice, fai riferimento a @string/someValueA o R.string.someValueA (o B, o C, ecc.) Come appropriato, ovunque sia necessario inserire tali valori. Nel caso di ListPreference in un file xml, dovresti usare qualcosa di simile a questo:

 <ListPreference
       android:defaultValue="@string/someValueA"
       android:dialogTitle="Some dialog title"
       android:entries="@array/someNamesA"
       android:entryValues="@array/someValuesA"
       android:key="some_preference"
       android:summary="Your summary text"
       android:title="Some Title" />

Una volta trovate le voci che stanno causando il problema, non è terribile risolverlo. La conversione dei valori "d" nei messaggi logcat da esadecimale a decimale dovrebbe indirizzarti nella giusta direzione. Ad esempio, 0x5a0 è 1440, quindi dovresti essere in grado di identificare dove hai usato il valore 1440 nel tuo codice.





android-logcat