package com.application.zhangshi_app_android.ui.personal_center; import static com.android.app_base.base.BaseConfig.CODE_SUCCESS; import android.app.Application; import androidx.annotation.NonNull; import androidx.lifecycle.MutableLiveData; import com.android.app_base.base.StateViewEnum; import com.android.app_base.base.viewmodel.BaseViewModel; import com.android.app_base.http.ResultData; import com.android.app_base.manager.UserManager; import com.android.app_base.utils.RxUtils; import com.android.app_base.utils.rxbus.MessageEvent; import com.android.app_base.utils.rxbus.RxBus; import com.application.zhangshi_app_android.bean.BannerBean; import com.application.zhangshi_app_android.bean.GrowthExperienceInformationBean; import com.application.zhangshi_app_android.bean.UploadFileResponseBean; import com.application.zhangshi_app_android.data.DataRepository; import java.io.File; import io.reactivex.ObservableSource; import io.reactivex.Observer; import io.reactivex.disposables.Disposable; import io.reactivex.functions.Action; import io.reactivex.functions.Consumer; import io.reactivex.functions.Function; import okhttp3.MediaType; import okhttp3.MultipartBody; import okhttp3.RequestBody; /** * @author Ljj * @date 2023.03.15. 20:18 * @desc 个人中心 Fragment的 ViewModel */ public class PersonalCenterFragmentViewModel extends BaseViewModel { private MutableLiveData infoLiveData;//个人信息 public PersonalCenterFragmentViewModel(@NonNull Application application) { super(application); } @Override protected DataRepository initModel() { return DataRepository.getInstance(); } /** * 获取个人信息 */ public void getInfo(){ model.getGrowthExperienceInformation() .compose(RxUtils.schedulersTransformer()) .subscribe(new Observer>() { @Override public void onSubscribe(Disposable d) { addSubscribe(d); } @Override public void onNext(ResultData data) { if (data.getCode() == CODE_SUCCESS){ getInfoLiveData().postValue(data.getData()); GrowthExperienceInformationBean informationBean = data.getData(); if(informationBean != null){ UserManager.getInstance().setUserName(informationBean.getNickName()); UserManager.getInstance().setUserAvatar(informationBean.getImg()); RxBus.getInstance().post(new MessageEvent(MessageEvent.EVENT_UPDATE_USER_INFO,informationBean)); } }else { messageLiveData.postValue(data.getMsg()); } } @Override public void onError(Throwable e) { messageLiveData.postValue(e.getMessage()); } @Override public void onComplete() { } }); } /** * 修改个人信息(头像) */ public void updateInfo(String realPath) { File file = new File(realPath); RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), file); MultipartBody.Part body = MultipartBody.Part.createFormData("uploadFile", file.getName(), requestBody); model.uploadFile(body) .flatMap(new Function, ObservableSource>>() { @Override public ObservableSource> apply(ResultData resultData) throws Exception { GrowthExperienceInformationBean bean = getInfoLiveData().getValue(); if (bean == null){ bean = new GrowthExperienceInformationBean(); } bean.setImg(resultData.getData().getUrl()); infoLiveData.postValue(bean); return model.updateGrowthExperienceInformation(bean); } }) .compose(RxUtils.schedulersTransformer()) .doOnSubscribe(new Consumer() { @Override public void accept(Disposable disposable) throws Exception { changeStateView(StateViewEnum.DIALOG_LOADING); } }) .doFinally(new Action() { @Override public void run() throws Exception { changeStateView(StateViewEnum.DIALOG_DISMISS); } }) .subscribe(new Observer>() { @Override public void onSubscribe(Disposable d) { addSubscribe(d); } @Override public void onNext(ResultData data) { if (data.getCode() == CODE_SUCCESS){ messageLiveData.postValue("头像已上传"); GrowthExperienceInformationBean informationBean = getInfoLiveData().getValue(); if(informationBean != null){ UserManager.getInstance().setUserName(informationBean.getNickName()); UserManager.getInstance().setUserAvatar(informationBean.getUrl()); RxBus.getInstance().post(new MessageEvent(MessageEvent.EVENT_UPDATE_USER_INFO,informationBean)); } }else { messageLiveData.postValue(data.getMsg()); } } @Override public void onError(Throwable e) { messageLiveData.postValue(e.getMessage()); } @Override public void onComplete() { } }); } public MutableLiveData getInfoLiveData() { if (infoLiveData == null){ infoLiveData = new MutableLiveData<>(); } return infoLiveData; } public void setInfoLiveData(GrowthExperienceInformationBean infoBean) { if (infoLiveData == null){ infoLiveData = new MutableLiveData<>(); } infoLiveData.setValue(infoBean); } }