guoshen
2024-07-06 cf2204a85fa951dd9ce2698378101d822e6edbc8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
package com.application.zhangshi_app_android.ui.function;
 
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.AppManager;
import com.android.app_base.utils.RxUtils;
import com.android.app_base.utils.ToastUtils;
import com.android.app_base.utils.rxbus.MessageEvent;
import com.android.app_base.utils.rxbus.RxBus;
import com.application.zhangshi_app_android.bean.ContactsDetailBean;
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 com.blankj.utilcode.util.ImageUtils;
 
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
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;
 
/**
 * @author Ljj
 * @date 2023.08.01. 13:45
 * @desc 通讯录导入 Activity ViewModel
 */
public class ContactsImportActivityViewModel extends BaseViewModel<DataRepository> {
 
    public ContactsImportActivityViewModel(@NonNull Application application) {
        super(application);
    }
 
    @Override
    protected DataRepository initModel() {
        return DataRepository.getInstance();
    }
 
    //添加联系人
    public void addContacts(List<ContactsDetailBean> data) {
        // 创建一个集合,用于保存所有接口请求的 Observable
        List<Observable<ResultData<String>>> observables = new ArrayList<>();
 
        for (ContactsDetailBean bean : data) {
            Observable<ResultData<String>> addObservable;
            if (bean.getUrl() == null || bean.getUrl().isEmpty()) {
                addObservable = model.addContacts(bean);
            }else {
                if (bean.getPhotoData() == null || bean.getPhotoData().length == 0) {
                    addObservable = model.addContacts(bean);
                }else {
                    //将图片字节数组bean.getPhotoData()转换为文件
                    File file;
                    try {
                        file = new File(AppManager.getAppManager().currentActivity().getCacheDir(), "head_photo");
                        // 将头像字节数组写入文件
                        FileOutputStream fos = new FileOutputStream(file);
                        fos.write(bean.getPhotoData());
                        fos.flush();
                        fos.close();
 
                    } catch (IOException e) {
                        throw new RuntimeException(e);
                    }
                    ImageUtils.ImageType type = ImageUtils.getImageType(file);
                    File newFile = new File(file.getAbsolutePath()+"."+type.getValue());
                    file.renameTo(newFile);
                    RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), newFile);
                    MultipartBody.Part body = MultipartBody.Part.createFormData("uploadFile", newFile.getName(), requestBody);
                    // 将每个接口请求添加到 observables 集合中
                    Observable<ResultData<UploadFileResponseBean>> uploadObservable = model.uploadFile(body);
                    addObservable = uploadObservable.flatMap(resultData -> {
                        bean.setUrl(resultData.getData().getUrl());
                        return model.addContacts(bean);
                    });
                }
            }
 
            observables.add(addObservable);
        }
 
        // 使用 Observable.zip 将所有接口请求合并为一个 Observable
        Observable.zip(observables, results -> results)
                .compose(RxUtils.schedulersTransformer())
                .doOnSubscribe(disposable -> {
                    // 在订阅时展示加载对话框
                    changeStateView(StateViewEnum.DIALOG_LOADING);
                })
                .doFinally(() -> {
                    // 在所有接口请求完成后关闭加载对话框
                    changeStateView(StateViewEnum.DIALOG_DISMISS);
                }).subscribe(new Observer<Object[]>() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        addSubscribe(d);
                    }
 
                    @Override
                    public void onNext(Object[] objects) {
                        for (Object result : objects) {
                            if (result instanceof ResultData) {
                                ResultData<String> data = (ResultData<String>) result;
                                if (data.getCode() == CODE_SUCCESS) {
                                    ToastUtils.showShort("导入成功");
                                    RxBus.getInstance().post(new MessageEvent(MessageEvent.EVENT_REFRESH_DATA));
                                    AppManager.getAppManager().finishCurrentActivity();
                                } else {
                                    messageLiveData.postValue(data.getMsg());
                                }
                            }
                        }
                    }
 
                    @Override
                    public void onError(Throwable e) {
                        messageLiveData.postValue(e.getMessage());
                    }
 
                    @Override
                    public void onComplete() {
 
                    }
                });
    }
 
 
}