使用GreenDao更新用户头像,上传到服务器成功后通过greendao更新本地数据表中的图片地址,更新完后显示正常,但是当我手动杀死进程,重新打开就变成上一次设置的图片了,是表内图片地址没有更新成功吗?如果不成功的话第一次怎么拿到的是更新后的图片地址呢?
下面是用户数据库管理类,上传图片成功更新数据库的方法和另一个类中加载数据库中图片的方法,:
1.用户数据库管理类:
public class UserManager {
private static final String TAG = "UserManager";
private UserBeanDao mUserDao;
private UserBean mUser;
private static UserManager INSTANCE;
public static void init(Context context) {
INSTANCE = new UserManager(context);
}
public UserManager(Context context) {
DaoMaster.DevOpenHelper openHelper = new DaoMaster.DevOpenHelper(context, "user.db");
DaoMaster daoMaster = new DaoMaster(openHelper.getWritableDb());
DaoSession daoSession = daoMaster.newSession();
mUserDao = daoSession.getUserBeanDao();
List<UserBean> loginBeanList = mUserDao.queryBuilder().list();
if (loginBeanList != null && !loginBeanList.isEmpty()) {
mUser = loginBeanList.get(0);
}
}
public void login(final UserBean user) {
mUserDao.deleteAll();
mUserDao.insert(user);//保存用户信息
Log.d(TAG, "login:1607 ");
mUser = user;
// EventBusUtil.post(LoginEvent.createEvent(true));
}
public void logout() {
mUserDao.deleteAll();
mUser = null;
// EventBusUtil.post(LoginEvent.createEvent(false));
}
public void update(UserBean user) {
if (TextUtils.isEmpty(String.valueOf(user.getUserId()))) {
user.setUserId(mUser.getUserId());
}
mUserDao.update(user);
mUser = user;
}
/**
* 更新头像
*/
public void updateAvatar(String headImg) {
if (!isLogin()) {
return;
}
mUser.setAvatar(headImg);
update(mUser);
}
public UserBean getUser() {
return mUser;
}
public static UserManager getInstance() {
return INSTANCE;
}
public boolean isLogin() {
return mUser != null && !TextUtils.isEmpty(String.valueOf(mUser.getUserId()));
}
public String getUid() {
return mUser != null ? String.valueOf(mUser.getUserId()) : "";
}
public static boolean checkLogin(Activity activity) {
if (!UserManager.getInstance().isLogin()) {
// LoginActivity.startActivity(activity);
return false;
}
return true;
}
public static boolean checkLogin(Fragment fragment) {
if (!UserManager.getInstance().isLogin()) {
// LoginActivity.startActivity(fragment);
return false;
}
return true;
}
public void updateNickname(String nickname) {
if (mUser != null) {
mUser.setUserName(nickname);
mUserDao.save(mUser);
}
}
}
2.上传图片成功更新数据库的方法:
@Override
public void onSuccess(AvatarBean avatarBean, String msg) {
Glide.with(mContext)
.load(bytes)
.placeholder(R.mipmap.ic_launcher_round)
.transform(new GlideRoundTransformUtil(mContext))
.into(mAvatar);
String fileUrl = avatarBean.getImageUrl();
PreferenceUtil.putString(mContext, "successAvatar", fileUrl); //保存返回的头像到本地
UserManager.getInstance().updateAvatar(fileUrl); //上传成功后更新数据库中图片地址
}
});
3.加载数据库中图片的方法:
@Override
public void onResume() {
super.onResume();
// String savedAvatar = PreferenceUtil.getString(getActivity(), "successAvatar");//首次使用网络加载的图片,有上传头像用自己保存的头像
UserBean bean = UserManager.getInstance().getUser();
String savedAvatar = bean.getAvatar(); //设置完后正确显示,但是杀死进程重新打开变成上一次保存的图片
Log.d(TAG, "initData: 0952="+savedAvatar);
if (savedAvatar != "") {
Glide.with(this).load(savedAvatar).placeholder(R.mipmap.ic_launcher_round).into(mAvatar);//设置头像
}
}