相信很多同学都使用过Android Universal Image Loader 该开源项目。
今天把该开源代码和sample导入了正在写的app,代码是 这个 ,发现有不少注意的地方:
1.
如果发现导入的代码有错 ,检查一下是不是这个原因:
//assets/ 目录下面的两个jpg文件的文件名乱码了,因而编不出R.java 从而工程提示R出错,只要把这两个文件改正常的名字即可。
2.
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
androidmanifest.xml 记得要增加权限。
当我把lib导入自己的项目,参考sample的时候发现run的时候还是出现了问题:
12-20 17:41:49.445: E/AndroidRuntime(6651): java.lang.NullPointerException
12-20 17:41:49.445: E/AndroidRuntime(6651): at com.nostra13.universalimageloader.core.ImageLoader.stop(ImageLoader.java:441)
或者
12-20 17:42:31.460: E/AndroidRuntime(7101): java.lang.IllegalStateException: ImageLoader must be init with configuration before using
这是因为:
ImageLoader没有init
为啥没有init --------------------->我们从Application继承过来的UILApplication没有跑
(UILApplication可是专门负责ImageLoader的config和init的)没有init 肯定是抛出NullPointerException了!
针对这种情况,我们有几方法可以修改:
1.在BaseActivity那里修改:
protected ImageLoader imageLoader = ImageLoader.getInstance();
后面增加ImageLoader的init函数:
protected ImageLoader imageLoader = ImageLoader.getInstance();
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
imageLoader.init(ImageLoaderConfiguration.createDefault(this));
}
这里我就专门overrideonCreate函数了,直接写里面去,这种方法可以跑,但是使用的是default的configuration了,有啥差别,有待研究,但是目前暂时没发现问题。
2.在AndroidManifest.xml中修改Application的属性,让UILApplication跑起来。
在没引入Android Universal Image Loader前,我的AndroidManifest.xml中的application配置是默认的,并没有android:name该属性。
<application
android:name="com.yourproject.UILApplication"//增加了这个属性
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
完美解决。
不过这里有个瑕疵:就是只要一启动这个application,就肯定把ImageLoader给创建了,不管你是否需要使用,她就在那里,不离不弃。
所以,你也可以在runtime的其他需要的时候在iniImageLoader是最好的
3.在其他地方写一个initImageLoader函数,参考sample代码写,需要的时候再把imageLoader创建。
欢迎大家指教。