GdDistrictDataFetcher.java 4.64 KB

package com.wd.model;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.jetbrains.annotations.NotNull;
import org.json.JSONArray;
import org.json.JSONObject;

import androidx.annotation.NonNull;

import com.wd.capability.network.RetrofitClient;
import com.wd.listener.GetDistrictDataListener;
import com.wd.capability.network.fetcher.BaseDataFetcher;
import com.wd.common.api.RequestApi;
import com.wd.common.utils.CommonVarUtils;
import com.wd.foundation.bean.response.GdDistrictBean;
import com.wd.foundation.wdkit.json.GsonUtils;

import io.reactivex.Observable;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
import okhttp3.ResponseBody;

/**
 * 描述:
 *
 * @author : lvjinhui
 * @since: 2022/8/6
 */
public class GdDistrictDataFetcher extends BaseDataFetcher<RequestApi> {

    private GetDistrictDataListener listener;

    public GdDistrictDataFetcher(GetDistrictDataListener listener) {
        this.listener = listener;
    }

    public void getLocalDistrictData(String keywords) {
        Observable.just(keywords)
            .map(str -> ProvinceDataManager.getInstance().searchByKeyWord(str))
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Observer<List<GdDistrictBean>>() {
                @Override
                public void onSubscribe(@NonNull Disposable d) {

                }

                @Override
                public void onNext(@NonNull List<GdDistrictBean> gdDistrictBeans) {
                    if (listener != null) {
                        listener.onSuccess(gdDistrictBeans);
                    }
                }

                @Override
                public void onError(@NonNull Throwable e) {
                    if (listener != null) {
                        listener.onFailure();
                    }
                }

                @Override
                public void onComplete() {

                }
            });
    }

    public void getDistrictData(String keywords) {
        Map<String, Object> map = new HashMap<>();
        map.put("subdistrict", "1");
        map.put("key", CommonVarUtils.GD_SDK_WEB_API_KEY);
        map.put("extensions", "base");
        map.put("keywords", keywords);
        Observable<ResponseBody> observable = getRetrofit().getDistrictData(map);
        RetrofitClient.execute(observable, new Observer<ResponseBody>() {
            @Override
            public void onSubscribe(@NotNull Disposable d) {

            }

            @Override
            public void onNext(@NotNull ResponseBody responseBody) {
                JSONObject jsonObject = null;
                try {
                    jsonObject = new JSONObject(responseBody.string());

                    JSONArray districts = jsonObject.optJSONArray("districts");

                    if (districts != null && districts.length() > 0) {
                        List<GdDistrictBean> gdDistrictBeans = new ArrayList<>();
                        for (int i = 0; i < districts.length(); i++) {
                            JSONObject jsonObject1 = districts.optJSONObject(i);
                            if (jsonObject1 != null) {
                                String parentName = jsonObject1.optString("name");
                                JSONArray subList = jsonObject1.optJSONArray("districts");
                                // 想要的结果查询的下一级
                                for (int j = 0; j < subList.length(); j++) {
                                    JSONObject jsonObject2 = subList.optJSONObject(j);
                                    GdDistrictBean gdDistrictBean =
                                        GsonUtils.fromJson(jsonObject2.toString(), GdDistrictBean.class);
                                    gdDistrictBean.setParentName(parentName);
                                    gdDistrictBeans.add(gdDistrictBean);
                                }

                            }
                        }
                        if (listener != null) {
                            listener.onSuccess(gdDistrictBeans);
                        }
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }

            }

            @Override
            public void onError(@NotNull Throwable e) {
                if (listener != null) {
                    listener.onFailure();
                }
            }

            @Override
            public void onComplete() {

            }
        });
    }
}