Fastlib中rx风格编程

在很早之前我就关注过rxjava。里面的功能非常的吸引人。比如任务线性化、任务线程调度、平铺和集合任务等等。但是我不太想因为几个功能点引入第三方,所以再三思考后还是没有用上。这段时间空闲下来了我决定实现这部分的功能。


提一个比较适合的例子,在去年的一个项目中有一个功能,这个功能类似于微信的朋友圈,可以上传文字、图片和小视频,项目中所有的图片都先上传到一个接口上,由这个接口再返回一个图片url。问题是这个接口一次只支持一张图片,联系对方的接口开放人员(这个项目是移动端我们公司负责,其它全由另外一个公司负责),貌似请假也不知道是做别的项目没空来调整或者新开接口了。很郁闷,但是又要赶项目,只能硬着头皮上了


使用rx风格处理


前提讲完了,直接上代码

/**
 * 发布朋友圈文章
 * @param images 多图像本地路径
 * @param content 发表的文字
 */
private void publishMoments(String[] images, final String content){
    startTask(Task.beginCycle(images) //使用beginCycle展开数组
    .next(new Action<String,Request>(){

        @Override
        protected Request execute(String param){
            return new Request(UPLOAD_IMAGE).put("image",new File(param)); //生成上传单个图像的网络请求
        }
    })
    .next(new NetAction<ResponseUploadImage>(){

        @Override
        protected void executeAdapt(ResponseUploadImage responseUploadImage){
            if(!responseUploadImage.success) { //检查上传是否成功,如果不成功就停止任务链并且提示
                stopTask();
                N.showShort(MainActivity.this,responseUploadImage.errorMes);
            }
        }
    })
    .again(new Action<List<ResponseUploadImage>,Request>(){ //使用again来结束之前的循环并且获取结果数组

        @Override
        protected Request execute(List<ResponseUploadImage> param){
            StringBuilder sb=new StringBuilder();
            Request publishMomentsRequest=new Request(PUBLISH_MOMENTS);

            for(ResponseUploadImage image:param)
                sb.append(image).append("|");
            if(sb.length()>0) sb.deleteCharAt(sb.length()-1);
            publishMomentsRequest.put("user_name","test");
            publishMomentsRequest.put("password","123456");
            publishMomentsRequest.put("content",content);
            publishMomentsRequest.put("images",sb.toString());
            return publishMomentsRequest;
        }
    })
    .next(new NetAction<ResponsePublishMoments>(){

        @Override
        protected void executeAdapt(ResponsePublishMoments responsePublishMoments){
            //做了一些只能在主线程中的事件
        }
    },ThreadType.MAIN)); //指定回调运行在主线程中
}
说明都在注释里了,应该没什么难度,只要缕清逻辑在套用这个工具类,一些都变的清晰可靠了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值