精华内容
下载资源
问答
  • Android RxJava+Retrofit 一次(合并)请求多个接口

    万次阅读 热门讨论 2016-05-20 22:26:24
    最直接的最暴力的方法就是直接在个方法里同步调用两个接口,那使用RxJava怎么实现呢?这个问题可以使用RxJava的Merge操作符实现,故名思议就是将两个接口Observable合成个,废话不说直接上代码: @Override ...

    在实际开发中,我们需要同时请求2个或者2个以上的接口,同时又有更新UI,怎么办呢?

    最直接的最暴力的方法就是直接在一个方法里同步调用两个接口,那使用RxJava怎么实现呢?

    这个问题可以使用RxJava的Merge操作符实现,故名思议就是将两个接口Observable合成一个,废话不说直接上代码:

        @Override
        public void getPlaceAndWeatherData(String place) {
            mMainView.showProgress();
            PlaceRepository repository = new PlaceRepository();
            Context context = BaseApplication.getInstance();
            Observable placeObservable = repository.getPlaceList(context);
            Observable weatherObservable =  ServiceManager.getInstance().getApiService().getWeatherInfo(place, Constants.BAIDU_AK);
            Observable.merge(placeObservable, weatherObservable)
                    .subscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(new Subscriber<Object>() {
                        @Override
                        public void onCompleted() {
                            mMainView.hideProgress();
                        }
    
                        @Override
                        public void onError(Throwable e) {
                            mLogger.error(e.getMessage(), e);
                            mMainView.hideProgress();
                        }
    
                        @Override
                        public void onNext(Object obj) {
                            if (obj instanceof List) {
                                mMainView.setupPlaceData((List<Place>) obj);
                            } else if (obj instanceof WeatherResponse) {
                                mMainView.setupWeatherData((WeatherResponse) obj);
                            }
                        }
                    });
        }

    这样就很巧妙的解决了前面的问题。

    如果这样的代码看着还不舒服,你完全可以使用Lambda,这样可以让代码看起来少之又少,不过Android studio目前还不支持Lambda,如果想要使用请安装插件RetroLambda 并且JDK 使用JDK 8以上版本.

    如果想了解更多,源码地址:https://github.com/mickyliu945/CommonProj

    展开全文
  • 服务器什么情况下会产生一次请求多次响应? 或者请求一次接口接口业务执行了两遍? 在高并发的情况下,或者服务器请求多阻塞的情况下会不会出现这种情况,或者别的什么情况下会出现?
  • 文章来自:源码在线https://www.shengli.me/javascript/162.html   html 文件:   js  

    文章来自:源码在线https://www.shengli.me/javascript/162.html

     

    html 文件:

     

    js

     

    展开全文
  • 在点击个按钮的时候,需要请求接口s1将页面上的城市A转换为对应的城市三字码B,然后再用这个三字码B去请求另外一个接口s2,拿到返回信息C。 困境: 在实际项目中我发现,在接口s2中无法拿到接口S1中的B。我们...

    需求:

    在点击一个按钮的时候,需要请求接口s1将页面上的城市A转换为对应的城市三字码B,然后再用这个三字码B去请求另外一个接口s2,拿到返回信息C

    困境:

    在实际项目中我发现,在接口s2中无法拿到接口S1中的B。我们可以在接口s1里面取到B的值,但是在外面无法取到。

    分析:

    应该是接口请求的顺序问题,运行过程中会优先请求S2,再请求S1,所以,在s2中取B的值时,此时,B还未赋值,所以为空。

     

    解决:

    控制代码的执行顺序,在S1的成功回调中调用S2

     

    代码:

    代码有点乱,没有封装,直接回调,将就着看吧,后期再封装

     //通过每个航段的机场名字查询对应的城市名字--出发
            request.post('/orderInfo/selectCityByAirport', {
              airportName: this.alterlMsg.issueList[index].segmentList[index1].dAirportCName,//出发机场名字
              language: "zh_CN",
            }).then(response => {
              var data = response.data;
              if (data.code == 200) {
                this.startAddressd = data.data.cityName+"/"+data.data.cityCode
                this.cityCodef = data.data.cityCode;
              //回调1
                //通过每个航段的机场名字查询对应的城市名字--到达
                request.post('/orderInfo/selectCityByAirport', {
                  airportName: this.alterlMsg.issueList[index].segmentList[index1].aAirportCName,//到达机场名字
                  language: "zh_CN",
                }).then(response => {
                  var data = response.data;
                  if (data.code == 200) {
                    this.endAddressd =data.data.cityName+"/"+data.data.cityCode
                    this.cityCodet = data.data.cityCode
                    //单程城市和时间搜索
                    //         this.RemoteStr(this.fromCity)
                    request.post('/searchFlight/searchAir', {
    
                      tripType: 1,//单程或往返程类型
                      // fromCity: this.startAddress,//出发城市
                      fromCity: this.cityCodef,//出发城市三子码
                      toCity: this.cityCodet,//到达城市三子码
                      // toCity: this.endAddress,//到达城市
                      fromDate: 20181004,//出发日期
                      adultNumber: 1,//成年人数量
                      childNumber: 0,//小孩数量
                      infantNumber: 0,//婴儿数量
                      language: "zh_CN",
                    }).then(response => {
                        var data = response.data;
                        if (data.code == 200) {
                          this.$Modal.info({
                            title: '查询中',
                            type: "success",
                            loading: true,
                            onOk: () => {
                              setTimeout(() => {
                                this.$Modal.remove();
                                this.$Message.success('查询成功');
                              }, 1000);
                            }
                          });
                          this.isBtnhas = true;
                          this.routings = response.data.data.routings;
                          this.redisSelectKey = response.data.data.redisSelectKey;
                        }
                        if (data.code == 50312) {
                          this.$Modal.warning({
                            title: "不好意思",
                            content: "航班无数据"
                          });
                        }
                        if (data.code !== 200 && data.code !== 50312) {
                          this.$Modal.error({
                            title: "查询失败",
                            content: "系统出错啦"
                          });
                        }
                      }
                    );
                  } else {
    
                  }
                });
    
              } else {
    
              }
            });

     

     

    展开全文
  • axios.all()、axios.spread()两个辅助函数用于处理同时发送多个请求,可以实现在多个请求都完成后再执行一些逻辑。注意:该方法是axios的静态方法,不是axios实例的方法 首先下载axios npm install axios --sava...

    axios.all()、axios.spread()两个辅助函数用于处理同时发送多个请求,可以实现在多个请求都完成后再执行一些逻辑。注意:该方法是axios的静态方法,不是axios实例的方法

    首先下载axios

    npm install axios --sava-dev

    mina.js中引入axios,因为其不属于vue全家桶,所以将其挂载在vue原型上,实现全局使用

    main.js
    
    //引入axios模块(先下载`axios`--)
    import axios from 'axios'
    //将axios挂载在vue原型链上
    Vue.prototype.$axios = axios;
    

    在其他组件使用axios配合axios.all()、axios.spread()同时发送多个请求

    Home.vue
    
    //在methods中定义请求方法,并return出去,不要写请求回调then()
    methods:{
        getAllTask:function(){
         console.log('调用第一个接口')
         return this.$axios({
                  url:'http://192.168.*.**:***/api/getTask/getAllData',
                  method:'GET',
                  params:{
                    offset:1,
                    pageSize:10
                  }
                })
        },
        getAllCity:function(){
         console.log('调用第二个接口')
         return this.$axios({
                    url:'http://192.168.*.**:***/city/getCities',
                    method:'GET',
                  })
        }
      },
    //在mounted周期同时发送两个请求,并在请求都结束后,输出结果
     mounted:function(){
        var me = this; 
        this.$axios.all([me.getAllTask(),me.getAllCity()])
        .then(me.$axios.spread(function(allTask, allCity){
            console.log('所有请求完成')
            console.log('请求1结果',allTask)
            console.log('请求2结果',allCity)
    
        }))
       
      }
    

    查看控制台输出情况

    两个请求执行完成后,才执行axios.spread()中的函数,且axios.spread()回调函数的的返回值中的请求结果的顺序和请求的顺序一致

     

    展开全文
  • layui上传张图片请求一次接口

    千次阅读 2019-08-05 14:39:22
    layui上传张图片请求一次接口 新项目需求必须用layui写,没办法在用的过程中,碰到了这问题,找了好久,最后用这方法亲测是有效的,这样传参以后后台拿到了所有的数据, var files upload.render({ elem: ‘#...
  • Android 本来就是要做并发请求,开线程池在里面发网络请求,如果真要防止并发,那就弄个排队的线程池就行了。可以参考 AsyncTask 在高版本的实现,就是排队。...让服务端把多个接口合并成个大接口,减少网络请...
  • 一个页面多接口请求的思路

    千次阅读 2019-08-12 18:20:24
    一个页面如果接入的接口过多的处理方式(比如有A接口,B接口,C接口,D接口,E接口),并且到C接口后页面已经需要下拉才能看到后面的内容: A接口前提示(数据请求中...),A接口请求请求B,B后请求C,在C接口请求成功...
  • //线程组解决同个界面需要请求多个接口数据,当全部请求完成后,再进入主线程刷新界面  /*  这种问题使用 dispatch_group_enter(grpupE);来解决,dispatch_group_enter 和 dispatch_group_leave 必须要成对...
  • 应用首页有多个独立的功能模块, 而服务端针对这些模块提供的接口都是独立的,当页面加载的时候,会执行多个不同模块接口的调用请求。 问题: 由于都是异步的请求调用,这些接口请求得到数据响应的先后顺序并不...
  • 多次尝试请求接口

    千次阅读 2017-12-01 00:14:24
    接口请求的时候我们一般都是一次请求,成功就是成功失败就是失败,但是有的时候我们要同步的确定接口请求成功,比如一订单的状态,订单状态对整个流程影响是很大的,所以我们在有必要的时候需要同步请求成功,...
  • vue项目里使用axios对同一个接口同时进行次请求导致返回数据混乱,比如:第一次请求返回的数据跑到别的请求返回里 在尝试了一些解决方法之后个人还是建议直接与后台沟通更改接口逻辑,将所有参数放到数组里后台...
  • Request Method: OPTIONS ...目前的工作中,HEAD、PUT、DELETE我是真的没有见过……但是OPTIONS几乎天天都会遇到。本地环境跑公司项目的时候,每次POST之前,为啥浏览器还偷偷给我来一次没有返回的OPTION...
  • HTTP:一次接口调用触发两次请求

    千次阅读 2020-12-19 08:47:16
    一次接口调用触发两次请求
  • 场景:如果出现网络问题或者token失效,刷新页面,如果有多个接口请求就会出现报错,那么提示就会连续弹出几个 如图: 使用的是vue+element ui 解决方法:重写了个message import {Message } from 'element-ui' ...
  • import json import requests token = "" callbackUrl = "" def demo(): import asyncio async def outExpense(): expenseUrl = "" header = { "content-type": "applica...
  • 点击上传:
  • Vue中单页面初始化时请求多个接口需要加上遮罩层,如何等到所有接口请求完毕关闭loading遮罩层? 1.引入loading组件 import LoadingCom from '@/components/LoadingCom.vue' 2.声明控制是否显示loading的属性 ...
  • tomcat会维护个线程池,多个请求就会分配多个线程处理,请求一个线程 可通过修改tomcat的配置改变默认线程的数量 不是线程越多性能越好 同一时间并发执行的线程数量是有限的,不能无限扩展tomcat中的线程,...
  • 可以给请求添加一个无关的参数,并设置为不同的值! 转载于:https://www.cnblogs.com/hsmWorld/p/10173242.html
  • 使用promise修饰,在方法1 和方法2 都请求成功时再进行操作。 Promise.all([methods1,methods2]).then(res=>{ //在方法1 和方法2 都请求成功时再进行操作。 }) ...
  • 前几天查看network请求时意外发现本地环境跑公司项目的时候,每次POST之前,都偷偷给我来一次没有返回的OPTIONS请求。 询问了大佬、查了资料。原来在 CORS-跨域资源共享 中,可以使用 OPTIONS 方法发起一 ...
  • SpringBoot 防止接口恶意多次请求

    千次阅读 2019-11-14 17:07:22
    刚写代码不就,还不能做深层次安全措施,今天研究了一下基本的防止接口多次恶意请求的方法。 思路 1:设置同一IP,一个时间段内允许访问的最大次数 2:记录所有IP单位时间内访问的次数 3:将所有被限制IP存到...
  • 在jmeter中有时候会用到,将上一个接口的返回值作为下一个接口请求参数具体操作如下:1、首先新建个http请求(右键线程组--添加Sampler--http请求),同时添加好接口相应的请求参数 2、查看http请求结果(这里...
  • 1、在访问任何一个接口后,此接口在短时间内访问速度都很正常。但就是在每隔段时间后(大概几秒)第请求访问速度很慢,客户端显示耗时是3000ms,但服务器打印耗时正常就是60ms。 2、本机windows环境调试的时候...
  • postman点击一次连续发送多个请求

    万次阅读 2019-08-10 10:28:53
    使用场景:postman有两个请求,每次调其他业务接口时都需要先执行这两,我嫌太麻烦了得一个个点,怎么整? 这是准备操作的两个请求: 点击这按钮,打开界面如下两图 点击左下角的RUN即可看到你想要...
  • 多个接口同时请求的方法

    千次阅读 2020-03-19 16:11:05
    : $ npm install axios //使用淘宝源 $ cnpm install axios //或者使用cdn: <script src="https://unpkg.com/axios/dist/axios.min.js"></script> 二: //main.js import axios from 'axios' ...
  • 警告: 切勿将发送后台请求的axios方法写在自定义上传方法如:http-request="handleHttpRequest"中,否则将会按文件数量发送,造成多次请求,不符合预期提交一次上传多个文件。 覆盖默认上传,自定义上传:http-request ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 608,578
精华内容 243,431
关键字:

一次请求多个接口