如果我收到警告,如何识别代码不正确的位置转换为字符串:TypedValue?

时间:2011-04-05 16:04:52

标签: android resources android-logcat

以下是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 个答案:

答案 0 :(得分:12)

你从logcat获得的TypedValue可以这样解释:

  • t ==>输入(0x10 = TYPE_INT_DEC
  • d ==>实际数据(由t指定的解释)
  • a ==>有关的其他信息 价值来自哪里;只设定 对于字符串。
  • r ==>最终资源ID(未设置 如果您传递了字面值)

所以我猜你必须寻找你想要字符串的整数。

答案 1 :(得分:8)

这个问题也困扰着我;我发现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/someValueAR.string.someValueA(或B或C等),无论您需要放置这些值。对于xml文件中的ListPreference,您可以使用以下内容:

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

一旦找到导致问题的条目,解决它并不可怕。将logcat消息中的“d”值从十六进制转换为十进制应该指向正确的方向。例如,0x5a0是1440,因此您应该能够识别代码中使用值1440的位置。

答案 2 :(得分:1)

当我启用&#34;启用视图属性检查时,我遇到了这个问题&#34;选项:

Settings > Developer Options > Debugging

一旦我关闭了该设置,设备就会停止使用这些警告向logcat发送垃圾邮件。