问题
Ok I'm looking right past something here..
Every time I'm in my app and I change activities, logcat reports series of warnings:
02-04 14:42:36.524: WARN/Resources(1832): Converting to string: TypedValue{t=0x12/d=0x0 a=2 r=0x7f08002b}
02-04 14:42:36.524: WARN/Resources(1832): Converting to string: TypedValue{t=0x12/d=0x0 a=2 r=0x7f08002c}
02-04 14:42:36.524: WARN/Resources(1832): Converting to string: TypedValue{t=0x12/d=0x0 a=2 r=0x7f08002d}
Other apps are not showing such warnings. Is this a pre-release/aapt compression thing?
回答1:
You are using a bool resource where a string is expected.
You can find which resource is being used incorrectly by opening your generated R.java file and searching for the resource IDs from the logcat message:
0x7f08002b
0x7f08002c
0x7f08002d
All three should be from your bool.xml file (the "t=0x12" in the warning message means the resources are TYPE_INT_BOOLEAN).
Then, find where those resource IDs are being used in your project (probably a layout xml, but could be anywhere) and make sure the types match.
Here's an example of a TextView that would generate that log message. If in my res/values/bool.xml I have:
<resources>
<bool name="foo_flag">false</bool>
</resources>
I can incorrectly refer to it from a a layout xml file:
<TextView android:id="@+id/foo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@bool/foo_flag"></TextView>
When I run that app, I'll get the warning message since "text" expects a string resource, not a bool (my app appears as expected though since the flag is converted to the string "false").
回答2:
These warnings only occurred when a certain developer option was enabled.
Device Settings > Developer options > Disable 'Enable view attribute inspection'
回答3:
I've discovered that this warning is also outputted when specifying a plurals string from a widget that requires parameters.
For instance:
<plurals name="song_count">
<item quantity="one">%d song in playlist</item>
<item quantity="other">%d songs in playlist</item>
</plurals>
The warning will appear when inflating an activity that contains a widget referencing it:
<TextView
android:id="@+id/tv_total_songs"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@plurals/song_count" />
You no doubt replace the string after inflating the views to set the correct parameters, e.g.:
playlistSongCount.setText(
getResources().getQuantityString(
R.plurals.song_count,
songCount,
songCount));
The obvious solution here is to remove the android:text
attribute from the layout as it has no purpose.
回答4:
Check to see if you don't have:-
<TextView android:text="@+id/labelText"/>
in your resource file.
回答5:
Problem in android:text="@+id/fooText
Try change in your .xml this:
<TextView
android:id="@+id/foo"
android:text="@+id/fooText"/>
To this:
<TextView
android:id="@+id/foo"
android:text=""/>
回答6:
In my case the problem was in ListPreference
default value. Even if you type it as String
(for example "10"
) it will be interpreted as int
and then converted to String
and thus complaining.
For example, this will give a warning:
<ListPreference
android:defaultValue="10"
...
/>
but this will not:
<ListPreference
android:defaultValue="@string/ten"
...
/>
and define @string/ten
in strings.xml
as:
<string name="ten" translatable="false">10</string>
Dumb, but it gets rid of the warning.
来源:https://stackoverflow.com/questions/4903948/android-resources-converting-to-string-typedvalue-warning