From 1df231fd6aafa221aef3532d069c7e27d4331be7 Mon Sep 17 00:00:00 2001 From: Linjiajia <319408893@qq.com> Date: 星期日, 27 八月 2023 19:21:01 +0800 Subject: [PATCH] 功能全部完成 --- app/src/main/java/com/application/zhangshi_app_android/ui/function/FamilyMemorabiliaDetailActivityViewModel.java | 340 +++++++++++++++++++++++++++++++++++++++----------------- 1 files changed, 238 insertions(+), 102 deletions(-) diff --git a/app/src/main/java/com/application/zhangshi_app_android/ui/function/FamilyMemorabiliaDetailActivityViewModel.java b/app/src/main/java/com/application/zhangshi_app_android/ui/function/FamilyMemorabiliaDetailActivityViewModel.java index 539c971..82d428a 100644 --- a/app/src/main/java/com/application/zhangshi_app_android/ui/function/FamilyMemorabiliaDetailActivityViewModel.java +++ b/app/src/main/java/com/application/zhangshi_app_android/ui/function/FamilyMemorabiliaDetailActivityViewModel.java @@ -7,6 +7,7 @@ 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; @@ -17,17 +18,25 @@ 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); } @@ -41,41 +50,123 @@ * 澧炲姞瀹跺ぇ浜嬭 */ 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 { + //绉婚櫎宸茬粡涓婁紶鐨勬枃浠� + //鎶妎bjects鏁扮粍杞崲鎴恖ist锛岀劧鍚庣Щ闄� + 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 @@ -87,7 +178,7 @@ 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()); @@ -109,49 +200,132 @@ * 缂栬緫瀹跺ぇ浜嬭 */ 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 { + //绉婚櫎宸茬粡涓婁紶鐨勬枃浠� + //鎶妎bjects鏁扮粍杞崲鎴恖ist锛岀劧鍚庣Щ闄� + 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() { @@ -165,50 +339,12 @@ 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); } -- Gitblit v1.9.1