android - hacer - logcat apk
Cómo identificar dónde el código es incorrecto, si recibo una advertencia Convertir a cadena: TypedValue? (3)
El TypedValue
que obtienes de logcat se puede interpretar de esta manera:
-
t
==> tipo (0x10
=TYPE_INT_DEC
) -
d
==> los datos reales (para ser interpretados como se especifica port
) -
a
==> Información adicional sobre el origen del valor; solo configurado para cadenas. -
r
==> eventual id de recurso (no establecido si pasaste un valor literal)
Así que supongo que debes buscar enteros que colocas donde esperaban las cadenas.
Aquí está el extracto de 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)
Este problema me estaba molestando también; Descubrí que las advertencias de logcat provienen de android:defaultValue
, no de las entradas de <item>
en la matriz. Puede resolver estos mensajes creando entradas de cadenas en un archivo xml (yo uso /xml/constants.xml, pero la convención de nomenclatura depende 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>
Aunque 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, haga referencia a @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 una ListPreference
en un archivo xml, 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 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.
Tuve este problema cuando habilité la opción "Habilitar la inspección de atributos de vista" dentro de:
Settings > Developer Options > Debugging
Una vez que apagué esa configuración, el dispositivo dejó de enviar correo no deseado con estas advertencias.