CodeMonkeyAlx
CodeMonkeyAlx

Reputation: 853

android.view.InflateException: Binary XML file line #94: Error inflating class

Running into a slight Inflation issue while trying to implement the micode open source compass into my app. So I am trying to figure out how to fix this. Another set of eyes looking at this would be good. So here we go:

Here is the class that this is relating to:

package styckz.com.clearpicturemode;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.ImageView;

public class CompassView extends ImageView {
private float mDirection;
private Drawable compass;

public CompassView(Context context) {
    super(context);
    mDirection = 0.0f;
    compass = null;
}

public CompassView(Context context, AttributeSet attrs) {
    super(context, attrs);
    mDirection = 0.0f;
    compass = null;
}

public CompassView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    mDirection = 0.0f;
    compass = null;
}

@Override
protected void onDraw(Canvas canvas) {
    if (compass == null) {
        compass = getDrawable();
        compass.setBounds(0, 0, getWidth(), getHeight());
    }

    canvas.save();
    canvas.rotate(mDirection, getWidth() / 2, getHeight() / 2);
    compass.draw(canvas);
    canvas.restore();
}

public void updateDirection(float direction) {
    mDirection = direction;
    invalidate();
}

}

So here we are... I tried turning that class above from public to static to no avail as per the request in another thread and it did not work... Maybe I am doing something wrong? All that did was make the class name highlight red below it and claim that static was invalid.

Any ideas?

Here is the Layout XML file:

<?xml version="1.0" encoding="UTF-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<FrameLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/background" >

    <LinearLayout
        android:id="@+id/view_compass"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@drawable/background_light"
        android:orientation="vertical" >

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="0dip"
            android:layout_weight="1"
            android:orientation="vertical" >

            <FrameLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:background="@drawable/prompt" >

                <LinearLayout
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:layout_marginTop="70dip"
                    android:orientation="horizontal" >

                    <LinearLayout
                        android:id="@+id/layout_direction"
                        android:layout_width="0dip"
                        android:layout_height="wrap_content"
                        android:layout_weight="1"
                        android:gravity="right"
                        android:orientation="horizontal" >
                    </LinearLayout>

                    <ImageView
                        android:layout_width="20dip"
                        android:layout_height="fill_parent" >
                    </ImageView>

                    <LinearLayout
                        android:id="@+id/layout_angle"
                        android:layout_width="0dip"
                        android:layout_height="wrap_content"
                        android:layout_weight="1"
                        android:gravity="left"
                        android:orientation="horizontal" >
                    </LinearLayout>
                </LinearLayout>
            </FrameLayout>

            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="0dip"
                android:layout_weight="1"
                android:orientation="vertical" >

                <FrameLayout
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center" >

                    <ImageView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center"
                        android:src="@drawable/background_compass" />

                    <net.micode.compass.CompassView
                        android:id="@+id/compass_pointer"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center"
                        android:src="@drawable/compass" />

                    <ImageView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center"
                        android:src="@drawable/miui_cover" />
                </FrameLayout>
            </LinearLayout>
        </LinearLayout>

        <FrameLayout
            android:id="@+id/location_layout"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" >

            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:background="@drawable/background_bottom"
                android:orientation="vertical" >
            </LinearLayout>

            <TextView
                android:id="@+id/textview_location"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:text="@string/getting_location"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:textColor="#7FFFFFFF" />
        </FrameLayout>
    </LinearLayout>
</FrameLayout>

<include
    android:id="@+id/low_accuracy_view"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom|center_horizontal"
    android:layout_marginBottom="35dip"
    layout="@*android:layout/transient_notification"
    android:visibility="gone" />

Also here is the logcat of doom:

11-22 14:22:30.667: E/AndroidRuntime(16140): FATAL EXCEPTION: main
11-22 14:22:30.667: E/AndroidRuntime(16140): java.lang.RuntimeException: Unable to start     activity        ComponentInfo{styckz.com.clearpicturemode/styckz.com.clearpicturemode.CompassActivity}:   android.view.InflateException: Binary XML file line #94: Error inflating class  net.micode.compass.CompassView
11-22 14:22:30.667: E/AndroidRuntime(16140):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at android.app.ActivityThread.access$600(ActivityThread.java:141)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at android.os.Handler.dispatchMessage(Handler.java:99)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at android.os.Looper.loop(Looper.java:137)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at android.app.ActivityThread.main(ActivityThread.java:5103)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at java.lang.reflect.Method.invokeNative(Native Method)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at java.lang.reflect.Method.invoke(Method.java:525)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at dalvik.system.NativeStart.main(Native Method)
11-22 14:22:30.667: E/AndroidRuntime(16140): Caused by: android.view.InflateException: Binary XML file line #94: Error inflating class net.micode.compass.CompassView
11-22 14:22:30.667: E/AndroidRuntime(16140):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:707)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:267)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at android.app.Activity.setContentView(Activity.java:1895)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at styckz.com.clearpicturemode.CompassActivity.onCreate(CompassActivity.java:99)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at android.app.Activity.performCreate(Activity.java:5133)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
11-22 14:22:30.667: E/AndroidRuntime(16140):    ... 11 more
11-22 14:22:30.667: E/AndroidRuntime(16140): Caused by: java.lang.ClassNotFoundException: Didn't find class "net.micode.compass.CompassView" on path: DexPathList[[zip file "/data/app/styckz.com.clearpicturemode-2.apk"],nativeLibraryDirectories=[/data/app-lib/styckz.com.clearpicturemode-2, /vendor/lib, /system/lib]]
11-22 14:22:30.667: E/AndroidRuntime(16140):    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:53)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at android.view.LayoutInflater.createView(LayoutInflater.java:559)
11-22 14:22:30.667: E/AndroidRuntime(16140):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
11-22 14:22:30.667: E/AndroidRuntime(16140):    ... 26 more

Upvotes: 1

Views: 7950

Answers (1)

tyczj
tyczj

Reputation: 73721

the problem is you have the wrong path in your xml.

you have CompassView as being located in net.micode.compass. but it is actually located in styckz.com.clearpicturemode

so change that in your xml

this

<net.micode.compass.CompassView
   android:id="@+id/compass_pointer"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_gravity="center"
   android:src="@drawable/compass" />

should look like this

<styckz.com.clearpicturemode.CompassView
   android:id="@+id/compass_pointer"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_gravity="center"
   android:src="@drawable/compass" />

Upvotes: 1

Related Questions