中级实训Android学习记录——项目3制作
学习记录 2020/11/27
-
使用图片加载库Picasso出现问题,无法加载图片
-
解决方法:
为应用加上网络的访问权限<uses-permission android:name="android.permission.INTERNET" />
-
-
使用RecyclerView的Adapter去增加或减少list中的项数的时候,最后需要notify一下
-
示例:
public void addItem(String url) { list.add(url); notifyItemInserted(list.size()-1); // 提醒列表中插入个项的位置 } public void clearItems() { list.clear(); notifyDataSetChanged(); // 提醒刷新整个列表 }
-
-
Picasso的一般用法
Picasso picasso = Picasso.get(); picasso.load(list.get(position)) .placeholder(R.mipmap.ic_launcher)//占位图 .error(R.drawable.ic_launcher_background) //加载失败的图 .fit()//充满 .into(holder.imageView);//加载到的ImageView
此时其实会有图片问题,如果ImageView的设置height是wrap_content,那么最后的height会和placeholder中的图片一样高,而不是和加载的图片一样高。
而fit会帮我们降低分辨率并将图片以当前的宽高进行拉伸,所以我们最后得到的图片可能并不美观。(目前未解决,只能在xml文件中设置宽和高,或者调用resize)
学习记录 2020/12/12
-
继续之前使用Picasso库进行项目三
-
出现错误:
Picasso并未提供清除缓存的接口解决方法:
改用
ImageLoader
库来实现项目三
-
-
使用
ImageLoader
库实现项目三- 引用之前实现的
RecyclerView
的模板,将Holder
的ImageView
用ImageLoader
的display
方法来从网络/本地加载图片
- 引用之前实现的
-
遇到的困难
-
首先,如同相似的网络请求一样,我们需要设定权限问题
// AndroidManifest.xml <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
如上
-
在过程中发现,仅仅是请求网络和存储的权限并不够还需要
ClearTextTraffic
的权限在
AndroidManifest.xml
中的application
中插入以下语句// AndroidManifest.xml <application ... android:usesCleartextTraffic="true" ... </application>
-
在使用
RecyclerView
时,在更新数据的时候不小心使用了notifyAll()
,以为他就是刷新数据用的使用
notifyDataSetChanged();
来代替notifyAll()
-
在用
ImageLoader
清空缓存时,我发现仅调用clearMemoryCache()
方法是不够的需要继续调用另一个方法:
public void delete() { this.imageLoader.clearMemoryCache(); this.imageLoader.clearDiskCache(); }
需要上述两个方法一同调用才可以,因为我们的
DisplayImageOptions
设置了.cacheInMemory(true)// 设置下载的图片是否缓存在内存中 .cacheOnDisk(true)// 设置下载的图片是否缓存在SD卡中
这个设置说明图片既可以存在缓存中,也可以存在SD卡中,所以我们需要清除两个
Cache
才行
-
-
实现效果
查看图片 | 清除 |
---|---|
清除后加载(速度较快) | 删除缓存后加载(速度较慢) |