摘要rxjava简单使用

来源:互联网 发布:js picker 编辑:程序博客网 时间:2024/06/01 07:55
public void getAreaInfoId(final String province, final String city, final String district, OnAreaInfoIdCallback onAreaInfoIdCallback){    mOnAreaInfoIdCallback = onAreaInfoIdCallback;    getAreaAddressEntity(new OnAreaAddressCallback() {        String mDid;        String mCid;        String mPid;        @Override        public void onSuccess(AreaAddressEntity areaAddressEntity) {            if(areaAddressEntity!=null && areaAddressEntity.list!=null && areaAddressEntity.list.size()>0){                AreaAddressEntity.AddressData addressData = areaAddressEntity.list.get(0);                if(addressData!=null){                    List<AreaAddressEntity.ProvinceList> province1 = addressData.province;                    //rxjava                    Observable.from(province1)                            //过滤条件                            .filter(new Func1<AreaAddressEntity.ProvinceList, Boolean>() {                                @Override                                public Boolean call(AreaAddressEntity.ProvinceList provinceList) {                                    return province!=null && province.equals(provinceList.pname);                                }                            })                            //平捕相当于for循环                            .flatMap(new Func1<AreaAddressEntity.ProvinceList, Observable<AreaAddressEntity.CityList>>() {                                @Override                                public Observable<AreaAddressEntity.CityList> call(AreaAddressEntity.ProvinceList provinceList) {                                    L.d("TAG","provinceList = "+ provinceList.pname);                                    mPid = provinceList.pid;                                    return Observable.from(provinceList.city);                                }                            })                            //过滤条件                            .filter(new Func1<AreaAddressEntity.CityList, Boolean>() {                                @Override                                public Boolean call(AreaAddressEntity.CityList cityList) {                                    return city!=null && city.equals(cityList.cname);                                }                            })                            //平捕相当于for循环                            .flatMap(new Func1<AreaAddressEntity.CityList, Observable<AreaAddressEntity.DistrictList>>() {                                @Override                                public Observable<AreaAddressEntity.DistrictList> call(AreaAddressEntity.CityList cityList) {                                    L.d("TAG","cityList = "+ cityList.cname);                                    mCid = cityList.cid;                                    return Observable.from(cityList.district);                                }                            })                            //过滤条件                            .filter(new Func1<AreaAddressEntity.DistrictList, Boolean>() {                                @Override                                public Boolean call(AreaAddressEntity.DistrictList districtList) {                                    return district == null || district.equals(districtList.dname);                                }                            })                            //订阅->联结Observer                            .subscribe(new Observer<AreaAddressEntity.DistrictList>() {                                @Override                                public void onCompleted() {                                    if (TextUtils.isEmpty(mPid) || TextUtils.isEmpty(mCid)) {                                            mPid = null;                                            mCid = null;                                            mDid = null;                                     }                                    L.d("TAG","mPid ="+ mPid + "  mCid="+ mCid + " mDid="+ mDid);                                    mOnAreaInfoIdCallback.onSuccess(mPid, mCid, mDid);                                }                                @Override                                public void onError(Throwable e) {                                }                                @Override                                public void onNext(AreaAddressEntity.DistrictList districtList) {                                    L.d("TAG","districtList = "+ districtList.dname);                                    mDid = districtList.did;                                }                            });                }            }        }        @Override        public void onFailure() {            if(mOnAreaInfoIdCallback!=null){                mOnAreaInfoIdCallback.onFailure();            }        }    })}//rxjava :异步。相当于AsyncTask.Handler..../ from:传入数组或是List发出去。filter:相当于要过渡的条件。flatMap:平捕相当于for。just:把参数依次发出去。//Scheduler:线程调。immediate():直接在当前线程运行,相当于不指定线程,这是默认的 Scheduler。newThead():总是启用新线程,并在新线程执行操作。io():无上线的线程池效率更高,可以重用空闲的线程。mainThread:指定的操作将在 Android 主线程运行//subscribeOn(Schedulers.io()) // 指定 subscribe() 发生在 IO 线程。observeOn(AndroidSchedulers.mainThread()) // 指定 Subscriber 的回调发生在主线程。
0 0