Michele De Pascalis
Michele De Pascalis

Reputation: 952

Adding a resources xml file to the project leads to runtime exception

I want to include a resources xml file to my Android application project to hold some string values intended to have a specific purpose, named categories_names.xml, copying it into the res/values folder, but as soon as I try to run the application it exits throwing an InflateException. Strange thing is, this resources file is not even accessed from within the launcher activity. How is it possible? I report the backtrace below.

07-13 13:24:21.842: W/dalvikvm(27215): threadid=1: thread exiting with uncaught exception (group=0x40a71930)
07-13 13:24:21.872: E/AndroidRuntime(27215): FATAL EXCEPTION: main
07-13 13:24:21.872: E/AndroidRuntime(27215): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mikidep.amount/com.mikidep.amount.MainActivity}: android.view.InflateException: Binary XML file line #53: Error inflating class android.widget.Button
07-13 13:24:21.872: E/AndroidRuntime(27215):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at android.app.ActivityThread.access$600(ActivityThread.java:141)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at android.os.Handler.dispatchMessage(Handler.java:99)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at android.os.Looper.loop(Looper.java:137)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at android.app.ActivityThread.main(ActivityThread.java:5041)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at java.lang.reflect.Method.invokeNative(Native Method)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at java.lang.reflect.Method.invoke(Method.java:511)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at dalvik.system.NativeStart.main(Native Method)
07-13 13:24:21.872: E/AndroidRuntime(27215): Caused by: android.view.InflateException: Binary XML file line #53: Error inflating class android.widget.Button
07-13 13:24:21.872: E/AndroidRuntime(27215):    at android.view.LayoutInflater.createView(LayoutInflater.java:613)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at android.view.LayoutInflater.onCreateView(LayoutInflater.java:660)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:685)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:749)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at com.mikidep.amount.NumberFragment.onCreateView(NumberFragment.java:36)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at android.app.Fragment.performCreateView(Fragment.java:1695)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:861)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1035)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at android.app.FragmentManagerImpl.addFragment(FragmentManager.java:1137)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at android.app.Activity.onCreateView(Activity.java:4717)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at android.view.LayoutInflater.inflate(LayoutInflater.java:466)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:270)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at android.app.Activity.setContentView(Activity.java:1881)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at com.mikidep.amount.MainActivity.onCreate(MainActivity.java:29)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at android.app.Activity.performCreate(Activity.java:5104)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
07-13 13:24:21.872: E/AndroidRuntime(27215):    ... 11 more
07-13 13:24:21.872: E/AndroidRuntime(27215): Caused by: java.lang.reflect.InvocationTargetException
07-13 13:24:21.872: E/AndroidRuntime(27215):    at java.lang.reflect.Constructor.constructNative(Native Method)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at android.view.LayoutInflater.createView(LayoutInflater.java:587)
07-13 13:24:21.872: E/AndroidRuntime(27215):    ... 34 more
07-13 13:24:21.872: E/AndroidRuntime(27215): Caused by: java.lang.ArrayIndexOutOfBoundsException: length=54; index=68
07-13 13:24:21.872: E/AndroidRuntime(27215):    at android.content.res.StringBlock.get(StringBlock.java:64)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at android.content.res.XmlBlock$Parser.getPooledString(XmlBlock.java:458)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at android.content.res.TypedArray.loadStringValueAt(TypedArray.java:720)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at android.content.res.TypedArray.getString(TypedArray.java:124)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at android.widget.TextView.<init>(TextView.java:928)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at android.widget.Button.<init>(Button.java:107)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at android.widget.Button.<init>(Button.java:103)
07-13 13:24:21.872: E/AndroidRuntime(27215):    ... 37 more

EDIT: Here's the mentioned layout. I must also say I already tried to delete/replace the element that seemed to be causing the issue, but it would simply apply to another one.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#F2F2F2"
    android:orientation="vertical"
    tools:context=".NumberActivity" >

    <TextView
        android:id="@+id/displayTextView"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:fontFamily="Lato"
        android:gravity="center"
        android:text="0"
        android:textColor="#F07B7B"
        android:textSize="70dp"
        android:typeface="normal"
        tools:ignore="SpUsage" />

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/clear_next_background" >

        <ImageView
            android:id="@+id/clearCrossImageView"
            android:layout_width="wrap_content"
            android:layout_height="30dp"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:layout_marginLeft="5dp"
            android:adjustViewBounds="true"
            android:contentDescription="@string/clear_number"
            android:paddingRight="0dp"
            android:src="@drawable/clear_cross_png" />

        <ImageView
            android:id="@+id/nextArrowImageView"
            android:layout_width="wrap_content"
            android:layout_height="30dp"
            android:layout_alignParentRight="true"
            android:layout_alignTop="@+id/clearCrossImageView"
            android:layout_centerVertical="true"
            android:layout_marginRight="5dp"
            android:adjustViewBounds="true"
            android:contentDescription="@string/next"
            android:cropToPadding="false"
            android:paddingLeft="0dp"
            android:src="@drawable/next_arrow_png" />

        <Button
            android:id="@+id/clearButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_toRightOf="@+id/clearCrossImageView"
            android:background="@drawable/clear_next_background"
            android:text="@string/clear_number"
            android:textAllCaps="true"
            android:textColor="#ffffff" />

        <Button
            android:id="@+id/nextButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_toLeftOf="@+id/nextArrowImageView"
            android:background="@drawable/clear_next_background"
            android:text="@string/next"
            android:textAllCaps="true"
            android:textColor="#ffffff" />

    </RelativeLayout>

    <TableLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <TableRow
            android:id="@+id/tableRow1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >

            <Button
                android:id="@+id/button7"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@drawable/number_button"
                android:text="7"
                android:textColor="#ffffff"
                android:textSize="25dp"
                tools:ignore="HardcodedText" />

            <Button
                android:id="@+id/button8"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@drawable/number_button"
                android:text="8"
                android:textColor="#ffffff"
                android:textSize="25dp"
                tools:ignore="HardcodedText" />

            <Button
                android:id="@+id/button9"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@drawable/number_button"
                android:text="9"
                android:textColor="#ffffff"
                android:textSize="25dp"
                tools:ignore="HardcodedText" />

        </TableRow>

        <TableRow
            android:id="@+id/tableRow2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1" >

            <Button
                android:id="@+id/button4"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@drawable/number_button"
                android:text="4"
                android:textColor="#ffffff"
                android:textSize="25dp"
                tools:ignore="HardcodedText" />

            <Button
                android:id="@+id/button5"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@drawable/number_button"
                android:text="5"
                android:textColor="#ffffff"
                android:textSize="25dp"
                tools:ignore="HardcodedText" />

            <Button
                android:id="@+id/button6"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@drawable/number_button"
                android:text="6"
                android:textColor="#ffffff"
                android:textSize="25dp"
                tools:ignore="HardcodedText" />

        </TableRow>

        <TableRow
            android:id="@+id/tableRow3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >

            <Button
                android:id="@+id/button1"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@drawable/number_button"
                android:text="1"
                android:textColor="#ffffff"
                android:textSize="25dp"
                tools:ignore="HardcodedText" />

            <Button
                android:id="@+id/button2"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@drawable/number_button"
                android:text="2"
                android:textColor="#ffffff"
                android:textSize="25dp"
                tools:ignore="HardcodedText" />

            <Button
                android:id="@+id/button3"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@drawable/number_button"
                android:text="3"
                android:textColor="#ffffff"
                android:textSize="25dp"
                tools:ignore="HardcodedText" />

        </TableRow>

        <TableRow
            android:id="@+id/tableRow4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:weightSum="6" >

            <ImageButton
                android:id="@+id/delImageButton"
                android:layout_width="0dp"
                android:layout_height="fill_parent"
                android:layout_weight="2"
                android:background="@drawable/number_button"
                android:contentDescription="@string/delete_button_description"
                android:cropToPadding="true"
                android:padding="17dp"
                android:scaleType="fitCenter"
                android:src="@drawable/del_button_png" />

            <Button
                android:id="@+id/button0"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="2"
                android:background="@drawable/number_button"
                android:text="0"
                android:textColor="#ffffff"
                android:textSize="25dp"
                tools:ignore="HardcodedText" />

            <Button
                android:id="@+id/buttonComma"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@drawable/number_button"
                android:text="@string/comma"
                android:textColor="#ffffff"
                android:textSize="25dp"
                tools:ignore="HardcodedText" />

            <Button
                android:id="@+id/buttonPlusMinus"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@drawable/number_button"
                android:text="+/-"
                android:textColor="#ffffff"
                android:textSize="25dp"
                tools:ignore="HardcodedText" />

        </TableRow>
    </TableLayout>

</LinearLayout>

EDIT 2: I found that putting those string resources together with the others in the res/values/strings.xml file has the same effect, so I guess there is some problem with those resources. I list them below.

<string name="category_angles">Angles</string>
<string name="category_area">Area</string>
<string name="category_electricity">Electricity</string>
<string name="category_kitchen">Kitchen</string>
<string name="category_data">Data</string>
<string name="category_energy">Energy</string>
<string name="category_force">Force</string>
<string name="category_frequency">Frequency</string>
<string name="category_illumination">Illumination</string>
<string name="category_luminance">Luminance</string>
<string name="category_lenght">Lenght</string>
<string name="category_mass">Mass</string>
<string name="category_power">Power</string>
<string name="category_pressure">Pressure</string>
<string name="category_temperature">Temperature</string>
<string name="category_time">Time</string>
<string name="category_typography">Typography</string>
<string name="category_torsion">Torsion</string>
<string name="category_currencies">Currencies</string>
<string name="category_speed">Speed</string>
<string name="category_internet_speed">Internet speed</string>
<string name="category_volume">Volume</string>

EDIT 3: I checked my R.java generated file to be sure it isn't a resources generator issue, but it looks fine. Pasting the strings section below.

public static final class string {
    public static final int action_settings=0x7f060017;
    public static final int animations_duration=0x7f060022;
    public static final int app_name=0x7f060016;
    public static final int categories_fragment_name=0x7f060021;
    public static final int category_angles=0x7f060000;
    public static final int category_area=0x7f060001;
    public static final int category_currencies=0x7f060012;
    public static final int category_data=0x7f060004;
    public static final int category_electricity=0x7f060002;
    public static final int category_energy=0x7f060005;
    public static final int category_force=0x7f060006;
    public static final int category_frequency=0x7f060007;
    public static final int category_illumination=0x7f060008;
    public static final int category_internet_speed=0x7f060014;
    public static final int category_kitchen=0x7f060003;
    public static final int category_lenght=0x7f06000a;
    public static final int category_luminance=0x7f060009;
    public static final int category_mass=0x7f06000b;
    public static final int category_power=0x7f06000c;
    public static final int category_pressure=0x7f06000d;
    public static final int category_speed=0x7f060013;
    public static final int category_temperature=0x7f06000e;
    public static final int category_time=0x7f06000f;
    public static final int category_torsion=0x7f060011;
    public static final int category_typography=0x7f060010;
    public static final int category_volume=0x7f060015;
    public static final int clear_number=0x7f060019;
    public static final int comma=0x7f06001d;
    public static final int delete_button_description=0x7f06001b;
    public static final int display_placeholder=0x7f06001c;
    public static final int hello_world=0x7f060020;
    public static final int history=0x7f060023;
    public static final int main_activity_name=0x7f06001e;
    public static final int next=0x7f06001a;
    public static final int number_fragment_name=0x7f060018;
    public static final int title_activity_category_list=0x7f06001f;
}

Upvotes: 2

Views: 1773

Answers (6)

Say.My.Name.
Say.My.Name.

Reputation: 521

I know this is a late response, but I had the same issue, and removing my "android:textAllCaps" styles fixed the issue. I'm not sure why though.. still investigating.

Upvotes: 2

Guru
Guru

Reputation: 46

A few things you could try (if you haven't already) to see if you make any headway:

  1. Using hard-coded strings in the layout instead of loading them from strings.xml.

  2. A quick look at the origin of ArrayIndexOutOfBoundsException

07-13 13:24:21.872: E/AndroidRuntime(27215): Caused by: java.lang.ArrayIndexOutOfBoundsException: length=54; index=68
07-13 13:24:21.872: E/AndroidRuntime(27215):    at android.content.res.StringBlock.get(StringBlock.java:64)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at android.content.res.XmlBlock$Parser.getPooledString(XmlBlock.java:458)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at android.content.res.TypedArray.loadStringValueAt(TypedArray.java:720)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at android.content.res.TypedArray.getString(TypedArray.java:124)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at android.widget.TextView.<init>(TextView.java:928)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at android.widget.Button.<init>(Button.java:107)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at android.widget.Button.<init>(Button.java:103)
07-13 13:24:21.872: E/AndroidRuntime(27215):    .. 37 more

seems to be the TextView init at this line which relates to setting the font family.

From your layout xml, it seems like you are using a custom font family ("Lato").

<TextView
    android:id="@+id/displayTextView"
    ...
    android:fontFamily="Lato"
    ...
/>

Is this supported by your application? Correct me if I'm wrong but from what I last know, the system-supported font families (since API 16) for the default Roboto font were 'sans-serif', 'sans-serif-light', 'sans-serif-condensed' or 'sans-serif-thin'.

The java.lang.reflect.InvocationTargetException

07-13 13:24:21.872: E/AndroidRuntime(27215): Caused by: java.lang.reflect.InvocationTargetException
07-13 13:24:21.872: E/AndroidRuntime(27215):    at java.lang.reflect.Constructor.constructNative(Native Method)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at android.view.LayoutInflater.createView(LayoutInflater.java:587)
07-13 13:24:21.872: E/AndroidRuntime(27215):    ... 34 more

could 'possibly' be caused when the system is unable to find and instantiate your custom font through reflection resulting in the subsequent InflateException.

So it's probably worth a try to use the default system font first to see if that resolves the issue.

Upvotes: 2

Armaan Stranger
Armaan Stranger

Reputation: 3140

It is Showing ArrayIndexOutOfBound Exception.

Caused by: java.lang.ArrayIndexOutOfBoundsException: length=54; index=68
07-13 13:24:21.872: E/AndroidRuntime(27215):    at android.content.res.StringBlock.get(StringBlock.java:64)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at android.content.res.XmlBlock$Parser.getPooledString(XmlBlock.java:458)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at android.content.res.TypedArray.loadStringValueAt(TypedArray.java:720)
07-13 13:24:21.872: E/AndroidRuntime(27215):    at android.content.res.TypedArray.getString(TypedArray.java:124)

Which means that it is caused by over indexing Array rather than its size. so may be you have used the resource index which is higher than your array size. so first do check that and then try to run.

Upvotes: 1

Petros Koutsolampros
Petros Koutsolampros

Reputation: 2800

Are you trying to inflate a Button? Because it seems that that won't work and it's a probable reason to get an exception. If you are, this is the way:

LinearLayout view = (LinearLayout) LayoutInflater.from(this).inflate(R.layout.yada_layout, null);
Button b = (Button) view.findViewById(R.id.clearButton);

Upvotes: 1

Phil H
Phil H

Reputation: 897

Your problem is in retrieving the string values. The clue is here...

E/AndroidRuntime(27215): Caused by: java.lang.ArrayIndexOutOfBoundsException: length=54; index=68 07-13 13:24:21.872: E/AndroidRuntime(27215): at android.content.res.StringBlock.get(StringBlock.java:64) 07-13 13:24:21.872: E/AndroidRuntime(27215): at android.content.res.XmlBlock$Parser.getPooledString(XmlBlock.java:458) 07-13 13:24:21.872: E/AndroidRuntime(27215): at android.content.res.TypedArray.loadStringValueAt(TypedArray.java:720) 07-13 13:24:21.872: E/AndroidRuntime(27215): at android.content.res.TypedArray.getString(TypedArray.java:124) 07-13 13:24:21.872: E/AndroidRuntime(27215): at android.widget.TextView.(TextView.java:928)

It looks like it is trying to retrieve a string value that doesn't exist, or it thinks doesn't exist. Have a look and see if there is anything in the strings file that is possibly causing it to not parse correctly.

From what you have supplied I can't be more specific than that.

Upvotes: 1

Dan Brough
Dan Brough

Reputation: 3015

Try deleting your bin and gen folders and then refreshing your project.

Upvotes: 1

Related Questions