开发者

Android Resources converting to string TypedValue warning

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.开发者_如何学C524: 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?


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

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


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


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.


Check to see if you don't have:-

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

in your resource file.


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


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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜