Android Resources converting to string TypedValue warning

AndroidResources

Android Problem Overview


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?

Android Solutions


Solution 1 - Android

These warnings only occurred when a certain developer option was enabled.

> Device Settings > Developer options > Disable 'Enable view attribute inspection'

Solution 2 - Android

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").

Updated for Android Gradle 4.X:

As of sometime by version 4.0.1 of the Android grade plugin this has changed. An R.java file is no longer generated. Instead An R.txt file is generated located somewhere like:

    build/intermediates/runtime_symbol_list/{variant}/R.txt

Solution 3 - Android

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.

Solution 4 - Android

Check to see if you don't have:-

<TextView android:text="@+id/labelText"/>

in your resource file.

Solution 5 - Android

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

Solution 6 - Android

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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionDJCView Question on Stackoverflow
Solution 1 - AndroidTobrunView Answer on Stackoverflow
Solution 2 - AndroidMikeView Answer on Stackoverflow
Solution 3 - AndroidPaul LammertsmaView Answer on Stackoverflow
Solution 4 - AndroidDallas ClarkeView Answer on Stackoverflow
Solution 5 - AndroidKit KatView Answer on Stackoverflow
Solution 6 - AndroidlenoohView Answer on Stackoverflow