| | |
| | | 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.AppManager; |
| | |
| | | import com.application.zhangshi_app_android.data.DataRepository; |
| | | |
| | | import java.io.File; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | |
| | | import io.reactivex.Observable; |
| | | 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; |
| | | |
| | | public class FamilyMemorabiliaDetailActivityViewModel extends BaseViewModel<DataRepository> { |
| | | |
| | | private MutableLiveData<FamilyMemorabiliaBean> beanMutableLiveData; |
| | | private MutableLiveData<FamilyMemorabiliaBean> beanLiveData; |
| | | private MutableLiveData<Boolean> typeLiveData;//true 编辑状态 false 展示状态 |
| | | private final List<String> uploadFileList = new ArrayList<>();//需要上传的文件列表 |
| | | public FamilyMemorabiliaDetailActivityViewModel(@NonNull Application application) { |
| | | super(application); |
| | | } |
| | |
| | | * 增加家大事记 |
| | | */ |
| | | public void add() { |
| | | model.addFamilyMemorabilia(beanMutableLiveData.getValue()) |
| | | .compose(RxUtils.schedulersTransformer()) |
| | | .subscribe(new Observer<ResultData<String>>() { |
| | | @Override |
| | | public void onSubscribe(Disposable d) { |
| | | addSubscribe(d); |
| | | } |
| | | if (uploadFileList.size() > 0) { |
| | | List<Observable<String>> observables = new ArrayList<>(); |
| | | for (String path : uploadFileList) { |
| | | File file = new File(path); |
| | | RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), file); |
| | | MultipartBody.Part body = MultipartBody.Part.createFormData("uploadFile", file.getName(), requestBody); |
| | | Observable<String> uploadObservable = model.uploadFile(body) |
| | | .flatMap(new Function<ResultData<UploadFileResponseBean>, ObservableSource<String>>() { |
| | | @Override |
| | | public ObservableSource<String> apply(ResultData<UploadFileResponseBean> resultData) throws Exception { |
| | | if (resultData.getCode() == CODE_SUCCESS) { |
| | | FamilyMemorabiliaBean bean = getBeanLiveData().getValue(); |
| | | if (bean != null) { |
| | | String urls = bean.getUrl(); |
| | | //替换图片地址 |
| | | urls = urls.replace(path, resultData.getData().getUrl()); |
| | | bean.setUrl(urls); |
| | | getBeanLiveData().postValue(bean); |
| | | } |
| | | return Observable.just(path); |
| | | } else { |
| | | return Observable.error(new Exception(resultData.getMsg())); |
| | | } |
| | | } |
| | | }); |
| | | |
| | | @Override |
| | | public void onNext(ResultData<String> stringResultData) { |
| | | if (stringResultData.getCode() == CODE_SUCCESS){ |
| | | AppManager.getAppManager().finishCurrentActivity(); |
| | | RxBus.getInstance().post(beanMutableLiveData.getValue()); |
| | | messageLiveData.postValue("添加成功"); |
| | | }else { |
| | | messageLiveData.postValue(stringResultData.getMsg()); |
| | | observables.add(uploadObservable); |
| | | } |
| | | Observable.zip(observables, result -> result) |
| | | .flatMap(new Function<Object[], Observable<ResultData<String>>>() { |
| | | @Override |
| | | public Observable<ResultData<String>> apply(Object[] objects) throws Exception { |
| | | //移除已经上传的文件 |
| | | //把objects数组转换成list,然后移除 |
| | | for (Object object : objects) { |
| | | uploadFileList.remove((String) object); |
| | | } |
| | | return model.addFamilyMemorabilia(beanLiveData.getValue()); |
| | | } |
| | | } |
| | | }) |
| | | .doOnSubscribe(new Consumer<Disposable>() { |
| | | @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); |
| | | } |
| | | }) |
| | | .compose(RxUtils.schedulersTransformer()) |
| | | .subscribe(new Observer<ResultData<String>>() { |
| | | @Override |
| | | public void onSubscribe(Disposable d) { |
| | | addSubscribe(d); |
| | | } |
| | | |
| | | @Override |
| | | public void onError(Throwable e) { |
| | | messageLiveData.postValue(e.getMessage()); |
| | | } |
| | | @Override |
| | | public void onNext(ResultData<String> stringResultData) { |
| | | if (stringResultData.getCode() == CODE_SUCCESS) { |
| | | AppManager.getAppManager().finishCurrentActivity(); |
| | | RxBus.getInstance().post(beanLiveData.getValue()); |
| | | messageLiveData.postValue("添加成功"); |
| | | } else { |
| | | messageLiveData.postValue(stringResultData.getMsg()); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void onComplete() { |
| | | @Override |
| | | public void onError(Throwable e) { |
| | | messageLiveData.postValue(e.getMessage()); |
| | | } |
| | | |
| | | } |
| | | }); |
| | | @Override |
| | | public void onComplete() { |
| | | |
| | | } |
| | | }); |
| | | }else { |
| | | model.addFamilyMemorabilia(beanLiveData.getValue()) |
| | | .compose(RxUtils.schedulersTransformer()) |
| | | .subscribe(new Observer<ResultData<String>>() { |
| | | @Override |
| | | public void onSubscribe(Disposable d) { |
| | | addSubscribe(d); |
| | | } |
| | | |
| | | @Override |
| | | public void onNext(ResultData<String> stringResultData) { |
| | | if (stringResultData.getCode() == CODE_SUCCESS) { |
| | | AppManager.getAppManager().finishCurrentActivity(); |
| | | RxBus.getInstance().post(beanLiveData.getValue()); |
| | | messageLiveData.postValue("添加成功"); |
| | | } else { |
| | | messageLiveData.postValue(stringResultData.getMsg()); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void onError(Throwable e) { |
| | | messageLiveData.postValue(e.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public void onComplete() { |
| | | |
| | | } |
| | | }); |
| | | } |
| | | } |
| | | /** |
| | | * 删除家大事记 |
| | | */ |
| | | public void delete() { |
| | | model.deleteFamilyMemorabilia(String.valueOf(beanMutableLiveData.getValue().getId())) |
| | | model.deleteFamilyMemorabilia(String.valueOf(beanLiveData.getValue().getId())) |
| | | .compose(RxUtils.schedulersTransformer()) |
| | | .subscribe(new Observer<ResultData<String>>() { |
| | | @Override |
| | |
| | | public void onNext(ResultData<String> stringResultData) { |
| | | if (stringResultData.getCode() == CODE_SUCCESS){ |
| | | AppManager.getAppManager().finishCurrentActivity(); |
| | | RxBus.getInstance().post(beanMutableLiveData.getValue()); |
| | | RxBus.getInstance().post(beanLiveData.getValue()); |
| | | messageLiveData.postValue("删除成功"); |
| | | }else { |
| | | messageLiveData.postValue(stringResultData.getMsg()); |
| | |
| | | * 编辑家大事记 |
| | | */ |
| | | public void update() { |
| | | model.updateFamilyMemorabilia(beanMutableLiveData.getValue()) |
| | | .compose(RxUtils.schedulersTransformer()) |
| | | .subscribe(new Observer<ResultData<String>>() { |
| | | @Override |
| | | public void onSubscribe(Disposable d) { |
| | | addSubscribe(d); |
| | | } |
| | | if (uploadFileList.size() > 0){ |
| | | List<Observable<String>> observables = new ArrayList<>(); |
| | | for (String path : uploadFileList) { |
| | | File file = new File(path); |
| | | RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), file); |
| | | MultipartBody.Part body = MultipartBody.Part.createFormData("uploadFile", file.getName(), requestBody); |
| | | Observable<String> uploadObservable = model.uploadFile(body) |
| | | .flatMap(new Function<ResultData<UploadFileResponseBean>, ObservableSource<String>>() { |
| | | @Override |
| | | public ObservableSource<String> apply(ResultData<UploadFileResponseBean> resultData) throws Exception { |
| | | if (resultData.getCode() == CODE_SUCCESS){ |
| | | FamilyMemorabiliaBean bean = getBeanLiveData().getValue(); |
| | | if (bean != null){ |
| | | String urls = bean.getUrl(); |
| | | //替换图片地址 |
| | | urls = urls.replace(path,resultData.getData().getUrl()); |
| | | bean.setUrl(urls); |
| | | getBeanLiveData().postValue(bean); |
| | | } |
| | | return Observable.just(path); |
| | | }else { |
| | | return Observable.error(new Exception(resultData.getMsg())); |
| | | } |
| | | } |
| | | }); |
| | | |
| | | @Override |
| | | public void onNext(ResultData<String> stringResultData) { |
| | | if (stringResultData.getCode() == CODE_SUCCESS){ |
| | | AppManager.getAppManager().finishCurrentActivity(); |
| | | RxBus.getInstance().post(beanMutableLiveData.getValue()); |
| | | messageLiveData.postValue("修改成功"); |
| | | }else { |
| | | messageLiveData.postValue(stringResultData.getMsg()); |
| | | observables.add(uploadObservable); |
| | | } |
| | | Observable.zip(observables,result -> result) |
| | | .flatMap(new Function<Object[], Observable<ResultData<String>>>() { |
| | | @Override |
| | | public Observable<ResultData<String>> apply(Object[] objects) throws Exception { |
| | | //移除已经上传的文件 |
| | | //把objects数组转换成list,然后移除 |
| | | for (Object object : objects) { |
| | | uploadFileList.remove((String) object); |
| | | } |
| | | return model.updateFamilyMemorabilia(beanLiveData.getValue()); |
| | | } |
| | | } |
| | | }) |
| | | .doOnSubscribe(new Consumer<Disposable>() { |
| | | @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); |
| | | } |
| | | }) |
| | | .compose(RxUtils.schedulersTransformer()) |
| | | .subscribe(new Observer<ResultData<String>>() { |
| | | @Override |
| | | public void onSubscribe(Disposable d) { |
| | | addSubscribe(d); |
| | | } |
| | | |
| | | @Override |
| | | public void onError(Throwable e) { |
| | | messageLiveData.postValue(e.getMessage()); |
| | | } |
| | | @Override |
| | | public void onNext(ResultData<String> stringResultData) { |
| | | if (stringResultData.getCode() == CODE_SUCCESS){ |
| | | AppManager.getAppManager().finishCurrentActivity(); |
| | | RxBus.getInstance().post(beanLiveData.getValue()); |
| | | messageLiveData.postValue("修改成功"); |
| | | }else { |
| | | messageLiveData.postValue(stringResultData.getMsg()); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void onComplete() { |
| | | @Override |
| | | public void onError(Throwable e) { |
| | | messageLiveData.postValue(e.getMessage()); |
| | | } |
| | | |
| | | } |
| | | }); |
| | | @Override |
| | | public void onComplete() { |
| | | |
| | | } |
| | | }); |
| | | }else { |
| | | model.updateFamilyMemorabilia(beanLiveData.getValue()) |
| | | .compose(RxUtils.schedulersTransformer()) |
| | | .subscribe(new Observer<ResultData<String>>() { |
| | | @Override |
| | | public void onSubscribe(Disposable d) { |
| | | addSubscribe(d); |
| | | } |
| | | |
| | | @Override |
| | | public void onNext(ResultData<String> stringResultData) { |
| | | if (stringResultData.getCode() == CODE_SUCCESS){ |
| | | AppManager.getAppManager().finishCurrentActivity(); |
| | | RxBus.getInstance().post(beanLiveData.getValue()); |
| | | messageLiveData.postValue("修改成功"); |
| | | }else { |
| | | messageLiveData.postValue(stringResultData.getMsg()); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void onError(Throwable e) { |
| | | messageLiveData.postValue(e.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public void onComplete() { |
| | | |
| | | } |
| | | }); |
| | | } |
| | | |
| | | } |
| | | |
| | | public MutableLiveData<FamilyMemorabiliaBean> getBeanMutableLiveData() { |
| | | if (beanMutableLiveData == null){ |
| | | beanMutableLiveData = new MutableLiveData<>(); |
| | | public MutableLiveData<FamilyMemorabiliaBean> getBeanLiveData() { |
| | | if (beanLiveData == null){ |
| | | beanLiveData = new MutableLiveData<>(); |
| | | } |
| | | if (beanMutableLiveData.getValue() == null){ |
| | | beanMutableLiveData.setValue(new FamilyMemorabiliaBean()); |
| | | if (beanLiveData.getValue() == null){ |
| | | beanLiveData.setValue(new FamilyMemorabiliaBean()); |
| | | } |
| | | return beanMutableLiveData; |
| | | return beanLiveData; |
| | | } |
| | | |
| | | public void setBeanMutableLiveData(MutableLiveData<FamilyMemorabiliaBean> beanMutableLiveData) { |
| | | this.beanMutableLiveData = beanMutableLiveData; |
| | | public void setBeanLiveData(MutableLiveData<FamilyMemorabiliaBean> beanLiveData) { |
| | | this.beanLiveData = beanLiveData; |
| | | } |
| | | |
| | | public MutableLiveData<Boolean> getTypeLiveData() { |
| | |
| | | this.typeLiveData = typeLiveData; |
| | | } |
| | | |
| | | /** |
| | | * 上传电子文件 |
| | | */ |
| | | public void uploadFile(File file) { |
| | | RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), file); |
| | | MultipartBody.Part body = MultipartBody.Part.createFormData("uploadFile", file.getName(), requestBody); |
| | | model.uploadFile(body) |
| | | .compose(RxUtils.schedulersTransformer()) |
| | | .subscribe(new Observer<ResultData<UploadFileResponseBean>>() { |
| | | @Override |
| | | public void onSubscribe(Disposable d) { |
| | | addSubscribe(d); |
| | | } |
| | | public List<String> getUploadFileList() { |
| | | return uploadFileList; |
| | | } |
| | | |
| | | @Override |
| | | public void onNext(ResultData<UploadFileResponseBean> resultData) { |
| | | if (resultData.getCode() == CODE_SUCCESS){ |
| | | FamilyMemorabiliaBean bean = getBeanMutableLiveData().getValue(); |
| | | String url; |
| | | if (bean != null){ |
| | | url = bean.getUrl(); |
| | | if (url == null){ |
| | | url = resultData.getData().getUrl(); |
| | | }else { |
| | | url = url + "," + resultData.getData().getUrl(); |
| | | } |
| | | bean.setUrl(url); |
| | | beanMutableLiveData.postValue(bean); |
| | | } |
| | | }else { |
| | | messageLiveData.postValue(resultData.getMsg()); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void onError(Throwable e) { |
| | | messageLiveData.postValue(e.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public void onComplete() { |
| | | |
| | | } |
| | | }); |
| | | public void addUploadFile(String url) { |
| | | uploadFileList.add(url); |
| | | } |
| | | |
| | | |