3

I've seen a couple crashes for my app, and I'm having trouble pinpointing what's going wrong. I'm not having any luck reproducing even with video of what my user was doing at the time of the crash. It doesn't seem to be an "every time" crash.

Can somebody tell me what my issue could be from the stack trace below? It seems like the inflate method just straight up failed. If it's a "system" problem (typical developer... blame the native, I know :P), any recommendations to handle it? I've never seen anybody catching and handling an inflation exception before.

The stacktrace is as follows:

android.view.InflateException
android.view.LayoutInflater.createView(LayoutInflater.java:619)
android.view.LayoutInflater.onCreateView(LayoutInflater.java:649)
android.view.LayoutInflater.onCreateView(LayoutInflater.java:666)
android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:691)
android.view.LayoutInflater.inflate(LayoutInflater.java:467)
android.view.LayoutInflater.inflate(LayoutInflater.java:397)
com.weddingwire.vendorsearch.adapters.GalleryImageAdapter.getView(GalleryImageAdapter.java:40)
it.sephiroth.android.library.widget.AbsHListView.a(AbsHListView.java:1950)
it.sephiroth.android.library.widget.HListView.a(HListView.java:1887)
it.sephiroth.android.library.widget.HListView.g(HListView.java:692)
it.sephiroth.android.library.widget.HListView.g(HListView.java:754)
it.sephiroth.android.library.widget.HListView.e(HListView.java:1706)
it.sephiroth.android.library.widget.AbsHListView.onLayout(AbsHListView.java:1791)
android.view.View.layout(View.java:14101)
android.view.ViewGroup.layout(ViewGroup.java:4655)
android.widget.LinearLayout.setChildFrame(LinearLayout.java:1655)
android.widget.LinearLayout.layoutVertical(LinearLayout.java:1513)
android.widget.LinearLayout.onLayout(LinearLayout.java:1426)
android.view.View.layout(View.java:14101)
android.view.ViewGroup.layout(ViewGroup.java:4655)
android.widget.FrameLayout.onLayout(FrameLayout.java:448)
android.widget.ScrollView.onLayout(ScrollView.java:1725)
android.view.View.layout(View.java:14101)
android.view.ViewGroup.layout(ViewGroup.java:4655)
android.widget.RelativeLayout.onLayout(RelativeLayout.java:948)
android.view.View.layout(View.java:14101)
android.view.ViewGroup.layout(ViewGroup.java:4655)
android.widget.FrameLayout.onLayout(FrameLayout.java:448)
android.view.View.layout(View.java:14101)
android.view.ViewGroup.layout(ViewGroup.java:4655)
android.widget.LinearLayout.setChildFrame(LinearLayout.java:1655)
android.widget.LinearLayout.layoutVertical(LinearLayout.java:1513)
android.widget.LinearLayout.onLayout(LinearLayout.java:1426)
android.view.View.layout(View.java:14101)
android.view.ViewGroup.layout(ViewGroup.java:4655)
android.widget.FrameLayout.onLayout(FrameLayout.java:448)
android.view.View.layout(View.java:14101)
android.view.ViewGroup.layout(ViewGroup.java:4655)
android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2019)
android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1840)
android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1133)
android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4632)
android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
android.view.Choreographer.doCallbacks(Choreographer.java:555)
android.view.Choreographer.doFrame(Choreographer.java:525)
android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
android.os.Handler.handleCallback(Handler.java:615)
android.os.Handler.dispatchMessage(Handler.java:92)
android.os.Looper.loop(Looper.java:137)
android.app.ActivityThread.main(ActivityThread.java:4938)
java.lang.reflect.Method.invokeNative(Native Method)
java.lang.reflect.Method.invoke(Method.java:511)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
dalvik.system.NativeStart.main(Native Method)

Caused by: java.lang.reflect.Constructor.constructNative(Native Method)
java.lang.reflect.Constructor.newInstance(Constructor.java:417)
android.view.LayoutInflater.createView(LayoutInflater.java:593)
android.view.LayoutInflater.onCreateView(LayoutInflater.java:649)
android.view.LayoutInflater.onCreateView(LayoutInflater.java:666)
android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:691)
android.view.LayoutInflater.inflate(LayoutInflater.java:467)
android.view.LayoutInflater.inflate(LayoutInflater.java:397)
com.company.app.adapters.GalleryImageAdapter.getView(GalleryImageAdapter.java:40)
it.sephiroth.android.library.widget.AbsHListView.a(AbsHListView.java:1950)
it.sephiroth.android.library.widget.HListView.a(HListView.java:1887)
it.sephiroth.android.library.widget.HListView.g(HListView.java:692)
it.sephiroth.android.library.widget.HListView.g(HListView.java:754)
it.sephiroth.android.library.widget.HListView.e(HListView.java:1706)
it.sephiroth.android.library.widget.AbsHListView.onLayout(AbsHListView.java:1791)
android.view.View.layout(View.java:14101)
android.view.ViewGroup.layout(ViewGroup.java:4655)
android.widget.LinearLayout.setChildFrame(LinearLayout.java:1655)
android.widget.LinearLayout.layoutVertical(LinearLayout.java:1513)
android.widget.LinearLayout.onLayout(LinearLayout.java:1426)
android.view.View.layout(View.java:14101)
android.view.ViewGroup.layout(ViewGroup.java:4655)
android.widget.FrameLayout.onLayout(FrameLayout.java:448)
android.widget.ScrollView.onLayout(ScrollView.java:1725)
android.view.View.layout(View.java:14101)
android.view.ViewGroup.layout(ViewGroup.java:4655)
android.widget.RelativeLayout.onLayout(RelativeLayout.java:948)
android.view.View.layout(View.java:14101)
android.view.ViewGroup.layout(ViewGroup.java:4655)
android.widget.FrameLayout.onLayout(FrameLayout.java:448)
android.view.View.layout(View.java:14101)
android.view.ViewGroup.layout(ViewGroup.java:4655)
android.widget.LinearLayout.setChildFrame(LinearLayout.java:1655)
android.widget.LinearLayout.layoutVertical(LinearLayout.java:1513)
android.widget.LinearLayout.onLayout(LinearLayout.java:1426)
android.view.View.layout(View.java:14101)
android.view.ViewGroup.layout(ViewGroup.java:4655)
android.widget.FrameLayout.onLayout(FrameLayout.java:448)
android.view.View.layout(View.java:14101)
android.view.ViewGroup.layout(ViewGroup.java:4655)
android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2019)
android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1840)
android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1133)
android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4632)
android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
android.view.Choreographer.doCallbacks(Choreographer.java:555)
android.view.Choreographer.doFrame(Choreographer.java:525)
android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
android.os.Handler.handleCallback(Handler.java:615)
android.os.Handler.dispatchMessage(Handler.java:92)
android.os.Looper.loop(Looper.java:137)
android.app.ActivityThread.main(ActivityThread.java:4938)
java.lang.reflect.Method.invokeNative(Native Method)
java.lang.reflect.Method.invoke(Method.java:511)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
dalvik.system.NativeStart.main(Native Method)

The relevant code is from what I consider a pretty typical ArrayAdapter. The getView method (which contains the problem stacktrace line from GalleryImageAdapter) is as follows:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ButterKnifeViewHolder holder;
    View v = convertView;

    if (v != null) {
        holder = (ButterKnifeViewHolder) v.getTag(R.id.key_view_holder);
    } else {
        v = inflater.inflate(R.layout.view_gallery_image, parent, false);
        holder = new ButterKnifeViewHolder(v);
        if (v != null) {
            v.setTag(R.id.key_view_holder, holder);
        }
    }

    if (holder != null) {
        WWUiUtility.loadImage(getContext(),
                getItem(position).getImage_400x400Url(),
                holder.mImage);
    }

    return v;
}

My ViewHolder is as follows:

static class ButterKnifeViewHolder {
    @InjectView(R.id.gallery_image)
    ImageView mImage;

    ButterKnifeViewHolder(View view) {
        ButterKnife.inject(this, view);
    }
}
loeschg
  • 29,961
  • 26
  • 97
  • 150

0 Answers0