Skip to content

Commit fe60e48

Browse files
committed
fix头像缓存
fix头像缓存
1 parent 32f9327 commit fe60e48

File tree

2 files changed

+50
-15
lines changed

2 files changed

+50
-15
lines changed

android/src/main/java/com/netease/im/ReactCache.java

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -107,22 +107,26 @@ public static Object createRecentList(List<RecentContact> recents, int unreadNum
107107
map.putString("unreadCount", String.valueOf(contact.getUnreadCount()));
108108
String name = "";
109109
SessionTypeEnum sessionType = contact.getSessionType();
110+
String imagePath = "";
110111
if (sessionType == SessionTypeEnum.P2P) {
111112
map.putString("teamType", "-1");
112113
NimUserInfoCache nimUserInfoCache = NimUserInfoCache.getInstance();
113-
map.putString("imagePath", nimUserInfoCache.getAvatar(contactId));
114+
imagePath = nimUserInfoCache.getAvatar(contactId);
115+
114116
map.putString("mute", boolean2String(NIMClient.getService(FriendService.class).isNeedMessageNotify(contactId)));
115117
name = nimUserInfoCache.getUserDisplayName(contactId);
116118
} else if (sessionType == SessionTypeEnum.Team) {
117119
Team team = TeamDataCache.getInstance().getTeamById(contactId);
118120
if (team != null) {
119121
name = team.getName();
120122
map.putString("teamType", Integer.toString(team.getType().getValue()));
121-
map.putString("imagePath", team.getIcon());
123+
imagePath = team.getIcon();
122124
map.putString("memberCount", Integer.toString(team.getMemberCount()));
123125
map.putString("mute", boolean2String(!team.mute()));
124126
}
125127
}
128+
map.putString("imagePath", imagePath);
129+
map.putString("imageLocal", ImageLoaderKit.getMemoryCachedAvatar(imagePath));
126130
map.putString("name", name);
127131
map.putString("sessionType", Integer.toString(contact.getSessionType().getValue()));
128132
map.putString("msgType", Integer.toString(contact.getMsgType().getValue()));
@@ -261,7 +265,7 @@ public static Object createFriendList(ContactDataList dataList, boolean hasFilte
261265
map.putString("name", NimUserInfoCache.getInstance().getUserName(contactId));
262266
String avatar = NimUserInfoCache.getInstance().getAvatar(contactId);
263267
map.putString("avatar", avatar);
264-
map.putString("avatarLocal", ImageLoaderKit.getAvatarCacheKey(avatar));
268+
map.putString("avatarLocal", ImageLoaderKit.getMemoryCachedAvatar(avatar));
265269
array.pushMap(map);
266270
// } else {
267271
// map.putString("itemType", Integer.toString(item.getItemType()));
@@ -302,7 +306,7 @@ public static Object createFriendSet(ContactDataList datas, boolean hasFilter) {
302306
map.putString("name", NimUserInfoCache.getInstance().getUserName(contact.getContactId()));
303307
String avatar = NimUserInfoCache.getInstance().getAvatar(contact.getContactId());
304308
map.putString("avatar", avatar);
305-
map.putString("avatarLocal", ImageLoaderKit.getAvatarCacheKey(avatar));
309+
map.putString("avatarLocal", ImageLoaderKit.getMemoryCachedAvatar(avatar));
306310
WritableArray array = listHashMap.get(belongs);
307311
if (array == null) {
308312
array = Arguments.createArray();
@@ -353,7 +357,7 @@ public static Object createTeamList(ContactDataList datas) {
353357
map.putString("type", Integer.toString(teamContact.getContactType()));
354358
String avatar = NimUserInfoCache.getInstance().getAvatar(teamContact.getContactId());
355359
map.putString("avatar", avatar);
356-
map.putString("avatarLocal", ImageLoaderKit.getAvatarCacheKey(avatar));
360+
map.putString("avatarLocal", ImageLoaderKit.getMemoryCachedAvatar(avatar));
357361
writableArray.pushMap(map);
358362
}
359363
// } else {
@@ -392,7 +396,7 @@ public static Object createUserInfo(NimUserInfo userInfo) {
392396
writableMap.putString("name", userInfo.getName());
393397
writableMap.putString("alias", NimUserInfoCache.getInstance().getUserDisplayName(userInfo.getAccount()));
394398
writableMap.putString("avatar", userInfo.getAvatar());
395-
writableMap.putString("avatarLocal", ImageLoaderKit.getAvatarCacheKey(userInfo.getAvatar()));
399+
writableMap.putString("avatarLocal", ImageLoaderKit.getMemoryCachedAvatar(userInfo.getAvatar()));
396400
writableMap.putString("signature", userInfo.getSignature());
397401
writableMap.putString("gender", Integer.toString(userInfo.getGenderEnum().getValue()));
398402
writableMap.putString("email", userInfo.getEmail());
@@ -416,7 +420,7 @@ public static Object createSystemMsg(List<SystemMessage> sysItems) {
416420
map.putString("fromAccount", message.getFromAccount());
417421
String avatar = nimUserInfoCache.getAvatar(message.getFromAccount());
418422
map.putString("avatar", avatar);
419-
map.putString("avatarLocal", ImageLoaderKit.getAvatarCacheKey(avatar));
423+
map.putString("avatarLocal", ImageLoaderKit.getMemoryCachedAvatar(avatar));
420424
map.putString("name", nimUserInfoCache.getUserDisplayNameEx(message.getFromAccount()));//alias
421425
map.putString("time", Long.toString(message.getTime() / 1000));
422426
map.putString("isVerify", String.valueOf(verify));
@@ -515,7 +519,7 @@ public static Object createBlackList(List<UserInfoProvider.UserInfo> data) {
515519
writableMap.putString("contactId", userInfo.getAccount());
516520
writableMap.putString("name", userInfo.getName());
517521
writableMap.putString("avatar", userInfo.getAvatar());
518-
writableMap.putString("avatarLocal", ImageLoaderKit.getAvatarCacheKey(userInfo.getAvatar()));
522+
writableMap.putString("avatarLocal", ImageLoaderKit.getMemoryCachedAvatar(userInfo.getAvatar()));
519523
array.pushMap(writableMap);
520524
}
521525
}
@@ -567,7 +571,7 @@ public static Object createTeamInfo(Team team) {
567571
writableMap.putString("teamId", team.getId());
568572
writableMap.putString("name", team.getName());
569573
writableMap.putString("avatar", team.getIcon());
570-
writableMap.putString("avatarLocal", ImageLoaderKit.getAvatarCacheKey(team.getIcon()));
574+
writableMap.putString("avatarLocal", ImageLoaderKit.getMemoryCachedAvatar(team.getIcon()));
571575
writableMap.putString("type", Integer.toString(team.getType().getValue()));
572576
writableMap.putString("introduce", team.getIntroduce());
573577
writableMap.putString("createTime", TimeUtil.getTimeShowString(team.getCreateTime(), true));
@@ -597,7 +601,7 @@ public static WritableMap createTeamMemberInfo(TeamMember teamMember) {
597601
writableMap.putString("joinTime", TimeUtil.getTimeShowString(teamMember.getJoinTime(), true));
598602
String avatar = NimUserInfoCache.getInstance().getAvatar(teamMember.getAccount());
599603
writableMap.putString("avatar", avatar);
600-
writableMap.putString("avatarLocal", ImageLoaderKit.getAvatarCacheKey(avatar));
604+
writableMap.putString("avatarLocal", ImageLoaderKit.getMemoryCachedAvatar(avatar));
601605
writableMap.putString("isInTeam", boolean2String(teamMember.isInTeam()));
602606
writableMap.putString("isMute", boolean2String(teamMember.isMute()));
603607
writableMap.putString("teamId", teamMember.getTid());
@@ -677,7 +681,7 @@ public static WritableMap createMessage(IMMessage item) {
677681
user.putString("name", !TextUtils.isEmpty(fromNick) ? fromNick : NimUserInfoCache.getInstance().getUserDisplayName(fromAccount));
678682
String avatar = NimUserInfoCache.getInstance().getAvatar(fromAccount);
679683
user.putString("avatar", avatar);
680-
user.putString("avatarLocal", ImageLoaderKit.getAvatarCacheKey(avatar));
684+
user.putString("avatarLocal", ImageLoaderKit.getMemoryCachedAvatar(avatar));
681685
itemMap.putMap("user", user);
682686

683687
MsgAttachment attachment = item.getAttachment();

android/src/main/java/com/netease/im/common/ImageLoaderKit.java

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import android.content.Context;
44
import android.graphics.Bitmap;
55
import android.text.TextUtils;
6+
import android.view.View;
67

78
import com.netease.im.IMApplication;
89
import com.netease.im.R;
@@ -17,17 +18,21 @@
1718
import com.nostra13.universalimageloader.core.DisplayImageOptions;
1819
import com.nostra13.universalimageloader.core.ImageLoader;
1920
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
21+
import com.nostra13.universalimageloader.core.assist.FailReason;
2022
import com.nostra13.universalimageloader.core.assist.ImageSize;
2123
import com.nostra13.universalimageloader.core.download.BaseImageDownloader;
2224
import com.nostra13.universalimageloader.core.download.ImageDownloader;
25+
import com.nostra13.universalimageloader.core.listener.ImageLoadingListener;
2326
import com.nostra13.universalimageloader.utils.DiskCacheUtils;
2427
import com.nostra13.universalimageloader.utils.MemoryCacheUtils;
2528
import com.nostra13.universalimageloader.utils.StorageUtils;
2629

2730
import java.io.File;
2831
import java.io.IOException;
2932
import java.util.ArrayList;
33+
import java.util.HashSet;
3034
import java.util.List;
35+
import java.util.Set;
3136

3237
/**
3338
* 图片加载、缓存、管理组件
@@ -181,19 +186,20 @@ private static Bitmap getMemoryCachedAvatarBitmap(String url) {
181186
return null;
182187
}
183188

184-
private static String getMemoryCachedAvatar(String url) {
189+
public static String getMemoryCachedAvatar(String url) {
185190
if (url == null || !isImageUriValid(url)) {
186191
return "";
187192
}
188-
// String key = getAvatarCacheKey(url);
193+
String key = getAvatarCacheKey(url);
189194

190-
File file = DiskCacheUtils.findInCache(url, ImageLoader.getInstance().getDiskCache());// 查询磁盘缓存示例
195+
File file = DiskCacheUtils.findInCache(key, ImageLoader.getInstance().getDiskCache());// 查询磁盘缓存示例
191196
if (file == null) {
192197
asyncLoadAvatarBitmapToCache(url);
193198
}
194199
return file == null ? "" : file.getAbsolutePath();
195200
}
196201

202+
private static Set<String> cacheLoad = new HashSet<>();
197203
/**
198204
* 异步加载头像位图到ImageLoader内存缓存
199205
*/
@@ -203,9 +209,34 @@ private static void asyncLoadAvatarBitmapToCache(String url) {
203209
}
204210

205211
String key = getAvatarCacheKey(url);
212+
if(cacheLoad.contains(key)){
213+
return;
214+
}
215+
cacheLoad.add(key);
216+
ImageLoadingListener listener = new ImageLoadingListener() {
217+
@Override
218+
public void onLoadingStarted(String s, View view) {
219+
220+
}
221+
222+
@Override
223+
public void onLoadingFailed(String s, View view, FailReason failReason) {
224+
225+
}
226+
227+
@Override
228+
public void onLoadingComplete(String s, View view, Bitmap bitmap) {
229+
cacheLoad.remove(s);
230+
}
231+
232+
@Override
233+
public void onLoadingCancelled(String s, View view) {
234+
235+
}
236+
};
206237
ImageLoader.getInstance().loadImage(key,
207238
new ImageSize(DEFAULT_AVATAR_THUMB_SIZE, DEFAULT_AVATAR_THUMB_SIZE),
208-
avatarLoadOption, null);
239+
avatarLoadOption, listener);
209240
}
210241

211242
/**

0 commit comments

Comments
 (0)