Okgo使用Rxjava2嵌套请求

Okgo使用Rxjava2嵌套请求

flatMap
应用场景:一个接口调用时依赖另一个接口的返回值,如一个接口调用成功后才调用第二个接口或者第二个接口需要第一个接口的返回值作为参数调用
举个栗子下面要实现一个交易,交易步骤是:
1 先从 api拿到节点信息 getEosChainInfo
2 拿到对象后签名
3然后使用api发送给后台pushTransaction
意思是要请求一个接口,本地加工,然后在发动给后台,如何优雅地实现

Api

    public static String  EOS_BASE_URL = "http://192.168.8.XXX:XX/";
    public static String getEosChainInfo = EOS_BASE_URL + "/eos/getChainInfo"; // Eos节点信息
    public static String pushTransaction = EOS_BASE_URL + "/eos/pushTransaction"; // push交易

Okgo ServerApi

public class ServerApi {
   public static Observable<Response<EosChainInfoModel>> getEosChainInfo(Context context) {
        return OkGo.<Response<EosChainInfoModel>>post(HttpModel.getEosChainInfo)
                .params("l", CacheUtils.getLanguage(context))
                .converter(new JsonConvert<Response<EosChainInfoModel>>() {
                })
                .adapt(new ObservableBody<Response<EosChainInfoModel>>());
    }


    public static Observable<Response<EosTxInfo>> pushTransaction(Context context,String pockJson) {
        return OkGo.<Response<EosTxInfo>>post(HttpModel.pushTransaction)
                .params("code", pockJson)
                .params("l", CacheUtils.getLanguage(context))
                .converter(new JsonConvert<Response<EosTxInfo>>() {
                })
                .adapt(new ObservableBody<Response<EosTxInfo>>());
    }
  }

嵌套请求


     ServerApi.getEosChainInfo(params.activity)
         .flatMap(new Function<Response<EosChainInfoModel>, Observable<String>>() {
                    @Override
                    public Observable<String> apply(Response<EosChainInfoModel> response) throws Exception {
                        if (response.isCode() && response.getData() != null) {
                            return signMessage(response.getData(), params);
                        } else {
                            if (!TextUtils.isEmpty(response.getMsg())) {
                                ToastUtils.show(response.getMsg());
                            }
                            return Observable.empty();
                        }

                    }
         }).flatMap(new Function<String, Observable<Response<EosTxInfo>>>() {
            @Override
            public Observable<Response<EosTxInfo>> apply(String packJson) throws Exception {
                if (packJson == null) {
                    return Observable.empty();
                } else {
                    return ServerApi.pushTransaction(params.activity, packJson);
                }
            }
        }).subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<Response<EosTxInfo>>() {
                    @Override
                    public void onSubscribe(@NonNull Disposable d) {
                       params.ui.showProgress("","");
                    }

                    @Override
                    public void onNext(@NonNull Response<EosTxInfo> response) {
                        if (response.isCode() && response.getData() != null) {

                          //TODO  Do something

                        } else {
                            String msg = response.getMsg();
                            if (TextUtils.isEmpty(msg)) {
                                msg = params.activity.getString(R.string.setting_get_eos_node_erro);
                            }
                            if (params.ui.isActive())

                                DialogController.getInstance().showErrorDialog(params.activity,     params.activity.getString(R.string.string_eos_transfer_push_fail), msg);
                        }

                        params.wipe();


                    }


                    @Override
                    public void onError(@NonNull Throwable e) {
                        e.printStackTrace();
                        params.ui.dismissProgress();


                    }

                    @Override
                    public void onComplete() {
                        params.ui.dismissProgress();

                    }
                });


    }

//签名后返回签名String
    private Observable<String> signMessage(EosChainInfoModel infoModel, EosTransferParams params) {
        return Observable.just(1)
                .map(i -> {
                    String pockJson = null;
                    try {
                        if (params.tx_form == 1) {
                            pockJson = signTransferMessage(infoModel, params);
                        } else if (params.tx_form == 2) {
                            pockJson = createAccountAndSign(infoModel, params);
                        } else if (params.tx_form == 3) {
                            pockJson = doSign(infoModel, params);
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    return pockJson;
                });
    }
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值