2011-04-05 7 views
5

Aquí es un extracto a partir de LogCat:Cómo identificar dónde el código es incorrecto, si recibo una advertencia Convirtiendo en cadena: TypedValue?

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) 
+0

¿Podríamos ver su xml? –

+0

Aquí está http://pastebin.com/ZXw6ffBa –

Respuesta

12

El TypedValue que se obtiene de Logcat puede interpretarse de esta manera:

  • t ==> Tipo (0x10 = TYPE_INT_DEC)
  • d == > los datos reales (que se interpretarán como se especifica en t)
  • a ==> Información adicional abo ut de dónde vino el valor; solo establezca para cadenas.
  • r ==> Identificación del eventual recurso (no establecido si pasado un valor literal)

Así que supongo que hay que mirar para los enteros que se pone en la que espera cuerdas.

+0

¿Debo pasar 'defaultValue' en' ListPreference' como Integer? –

+0

@LA_ Puedes intentarlo. Lo curioso es que veo en el xml (de la línea 107 hacia abajo) los primeros dos 0, 0x79e, 0x5a0, 5, pero uno 0xa y uno 0x1e, mientras que el logcat dice que hay dos de ellos. – bigstones

+1

Hmm. Eclipse no me permite ingresar valores como 'android: defaultValue = 0' (como entero). –

7

Este problema me estaba molestando también; Descubrí que las advertencias de logcat proceden de android:defaultValue, no de las entradas <item> en la matriz. Puede resolver estos mensajes mediante la creación de entradas de cadena en un archivo XML (utilizo /xml/constants.xml, pero el convenio de denominación es de usted y no importa) de la siguiente manera:

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

a pesar de que esos valores son enteros, ya que los declaras como cadenas, Android los considera cadenas para que no se genere ninguna advertencia de logcat.

En su código, consulte @string/someValueA o R.string.someValueA (o B, o C, etc.) según corresponda, donde sea que necesite poner esos valores. En el caso de un ListPreference en un archivo XML, se usaría algo como esto:

<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 vez que encuentre las entradas que están causando el problema, no es terrible para resolverlo. La conversión de los valores "d" en los mensajes de logcat de hexadecimal a decimal debe apuntar en la dirección correcta. Por ejemplo, 0x5a0 es 1440, por lo que debería poder identificar dónde utilizó el valor 1440 en su código.

+1

¡Solución limpia! Traté de asignar un int largo a defaultValue pero no pude obtener el número correcto. ¡Agregar el int largo al recurso me salvó! – Eliko

1

he tenido este problema cuando He activado la opción "Habilitar la lista de Inspección atributo" dentro:

Settings > Developer Options > Debugging

Una vez que me di de salir, el dispositivo se detuvo Logcat envío de correo basura de estas advertencias.

Cuestiones relacionadas