android头像本地缓存
时间: 2023-07-28 16:49:30 浏览: 269
Android中头像本地缓存可以通过使用SharedPreferences或者使用磁盘缓存的方式实现。
1. 使用SharedPreferences缓存头像:
可以将头像图片转化成Base64编码的字符串,然后将其保存在SharedPreferences中。当需要加载头像时,从SharedPreferences中读取Base64字符串,再将其转化为Bitmap对象。
具体实现代码如下:
```
//保存头像到SharedPreferences中
public void saveAvatarToSharedPreferences(Bitmap bitmap) {
SharedPreferences sharedPreferences = getSharedPreferences("avatar", MODE_PRIVATE);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream);
String avatarBase64 = Base64.encodeToString(byteArrayOutputStream.toByteArray(), Base64.DEFAULT);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("avatar", avatarBase64);
editor.apply();
}
//从SharedPreferences中加载头像
public Bitmap loadAvatarFromSharedPreferences() {
SharedPreferences sharedPreferences = getSharedPreferences("avatar", MODE_PRIVATE);
String avatarBase64 = sharedPreferences.getString("avatar", null);
if (avatarBase64 != null) {
byte[] bytes = Base64.decode(avatarBase64, Base64.DEFAULT);
return BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
}
return null;
}
```
2. 使用磁盘缓存方式缓存头像:
可以使用Android中的LruCache或者DiskLruCache类来实现磁盘缓存头像。LruCache是一种内存缓存,而DiskLruCache则是一种磁盘缓存。
具体实现代码如下:
```
//初始化DiskLruCache
private void initDiskLruCache() throws IOException {
File cacheDir = getExternalCacheDir();
if (cacheDir != null) {
int versionCode = getPackageManager().getPackageInfo(getPackageName(), 0).versionCode;
diskLruCache = DiskLruCache.open(cacheDir, versionCode, 1, 10 * 1024 * 1024);
}
}
//保存头像到DiskLruCache中
public void saveAvatarToDiskLruCache(String key, Bitmap bitmap) throws IOException {
if (diskLruCache == null) {
initDiskLruCache();
}
if (diskLruCache != null) {
DiskLruCache.Editor editor = diskLruCache.edit(key);
if (editor != null) {
OutputStream outputStream = editor.newOutputStream(0);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream);
editor.commit();
}
}
}
//从DiskLruCache中加载头像
public Bitmap loadAvatarFromDiskLruCache(String key) throws IOException {
if (diskLruCache == null) {
initDiskLruCache();
}
if (diskLruCache != null) {
DiskLruCache.Snapshot snapshot = diskLruCache.get(key);
if (snapshot != null) {
InputStream inputStream = snapshot.getInputStream(0);
return BitmapFactory.decodeStream(inputStream);
}
}
return null;
}
```
阅读全文