Как определить, где код является неправильным, если я получаю предупреждение Преобразование в строку: TypedValue? - PullRequest
6 голосов
/ 05 апреля 2011

Вот выдержка из 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)

Ответы [ 3 ]

12 голосов
/ 05 апреля 2011

TypedValue, полученное из logcat, можно интерпретировать следующим образом:

  • t ==> тип (0x10 = TYPE_INT_DEC)
  • d ==> фактические данные (следует интерпретировать, как указано t)
  • a ==> Дополнительная информация о откуда пришло значение; только набор для струнных.
  • r ==> конечный идентификатор ресурса (не задан если вы передали буквальное значение)

Так что, я думаю, вам нужно искать целые числа, которые вы положили туда, где ожидаемые строки.

8 голосов
/ 21 февраля 2014

Этот вопрос меня тоже беспокоил; Я обнаружил, что предупреждения logcat поступают от android:defaultValue, а не от <item> записей в массиве. Вы можете разрешить эти сообщения, создав строковые записи в файле xml (я использую /xml/constants.xml, но соглашение об именовании зависит от вас и не имеет значения) следующим образом:

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

Даже если эти значения являются целыми числами, так как вы объявляете их как строки, Android считает их строками, поэтому предупреждение logcat не генерируется.

В вашем коде укажите @string/someValueA или R.string.someValueA (или B, или C и т. Д.) В зависимости от того, где вам нужно поместить эти значения. В случае ListPreference в XML-файле вы должны использовать что-то вроде этого:

 <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" />

Как только вы найдете записи, которые вызывают проблему, не страшно решить ее. Преобразование значений «d» в сообщениях logcat из шестнадцатеричного в десятичное должно указывать вам правильное направление. Например, 0x5a0 - 1440, поэтому вы сможете определить, где вы использовали значение 1440 в своем коде.

1 голос
/ 09 февраля 2016

У меня была эта проблема, когда я включил опцию «Включить просмотр атрибутов просмотра» в:

Settings > Developer Options > Debugging

После того, как я отключил эту настройку, устройство перестало рассылать logcat с этими предупреждениями.

...