黑马程序员技术交流社区

标题: [深圳特色][问答网]使用FaceBook的图片框架自定义控件加载... [打印本页]

作者: Jim-剣◆﹏    时间: 2016-1-3 22:18
标题: [深圳特色][问答网]使用FaceBook的图片框架自定义控件加载...
一个已经工作的同学,在使用Fresco这个强大的图片处理框架的时候,加载错误
Error inflating class com.facebook.drawee.view.SimpleDraweeView
android.view.InflateException: Binary XML file line #14: Error inflating class com.facebook.drawee.view.SimpleDraweeView
Caused by: java.lang.reflect.InvocationTargetException
Caused by: java.lang.NullPointerException
            at com.facebook.drawee.view.DraweeView.setImageDrawable(DraweeView.java:140)


这里的问题在XML中使用了一个自定义控件com.facebook.drawee.view.SimpleDraweeView
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2.     xmlns:fresco="http://schemas.android.com/apk/res-auto"
  3.     android:layout_width="match_parent"
  4.     android:layout_height="match_parent"
  5.     android:orientation="vertical" >

  6.     <com.facebook.drawee.view.SimpleDraweeView
  7.         android:id="@+id/my_image_view"
  8.         android:layout_width="20dp"
  9.         android:layout_height="20dp"
  10.         fresco:placeholderImage="@drawable/my_drawable" />

  11. </LinearLayout>
复制代码


异常信息说,在加载xml文件的时候,不能inflating出SimpleDraweeView对象
我们再来看看activity是在哪里加载xml的,SimpleDraweeView又是在哪里初始化的
  1. protected void onCreate(Bundle savedInstanceState) {
  2.                 super.onCreate(savedInstanceState);
  3.                 setContentView(R.layout.activity_main);
  4.                 Fresco.initialize(this);
  5.                 Uri uri = Uri.parse("https://raw.githubusercontent.com/facebook/fresco/gh-pages/static/fresco-logo.png");
  6.                 SimpleDraweeView draweeView = (SimpleDraweeView) findViewById(R.id.my_image_view);
  7.                 draweeView.setImageURI(uri);

  8.         }
复制代码

可以看到我们是在setContentView(R.layout.activity_main);代码去加载xml对象的
然后再初始化Fresco.initialize(this);对象

所以我们只需要把Fresco.initialize(this);这个初始化后,然后再使用这个框架的自定义控件,就不会报错了
xml文件无需该
activity修改成:
  1. protected void onCreate(Bundle savedInstanceState) {
  2.                 super.onCreate(savedInstanceState);
  3.                 Fresco.initialize(this);
  4.                 setContentView(R.layout.activity_main);
  5.                 Uri uri = Uri.parse("https://raw.githubusercontent.com/facebook/fresco/gh-pages/static/fresco-logo.png");
  6.                 SimpleDraweeView draweeView = (SimpleDraweeView) findViewById(R.id.my_image_view);
  7.                 draweeView.setImageURI(uri);

  8.         }
复制代码





作者: liyongyong    时间: 2016-1-6 23:03
66666666666




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2