当前位置: 移动技术网 > IT编程>移动开发>Android > Android使用 Retrofit 2.X 上传多文件和多表单示例

Android使用 Retrofit 2.X 上传多文件和多表单示例

2019年07月24日  | 移动技术网IT编程  | 我要评论

竹节杖,江藤つかさ,放学我当家第一部

retrofit post请求上传表单和文件最重要的就是就是去构建requestbody,今天为大家带来一种超级简单的上传方式

body方式:

1、retrofit接口retrofitinterface

 @post(urlconstant.url_path)
  flowable<uploadimgbean> upload(@body requestbody body);

2、retrofit的配置

private static retrofitinterface getretrofitinterface(string baseurl) {
    if (retrofitinterface == null) {
      retrofit retrofit = new retrofit.builder()
          .baseurl(baseurl)
          .addconverterfactory(gsonconverterfactory.create())
//        .addconverterfactory(scalarsconverterfactory.create()) //string
          .addcalladapterfactory(rxjava2calladapterfactory.create())
          .build();
      retrofitinterface = retrofit.create(retrofitinterface.class);
    }
    return retrofitinterface;
  }

3、构建body

 public static flowable<uploadimgbean> upload(list<file> filelist) {
    //构建body
//addformdatapart()第一个参数为表单名字,这是和后台约定好的
    multipartbody.builder builder = new multipartbody.builder()
        .settype(multipartbody.form)
        .addformdatapart("username", "name") 
        .addformdatapart("phone", "phone")
   //注意,file是后台约定的参数,如果是多图,file[],如果是单张图片,file就行
    for (file file : filelist) {
      //这里上传的是多图
      builder.addformdatapart("file[]", file.getname(), requestbody.create(mediatype.parse("image/*"), file));
    }
    requestbody requestbody = builder.build();
    return getretrofitinterface(urlconstant.url_base).upload(requestbody);
  }

4、开始执行上传

httputils.upload(muploadfilelist)
        .subscribeon(schedulers.io())
        .observeon(androidschedulers.mainthread())
        .subscribe(new disposablesubscriber<uploadimgbean>() {
          @override
          public void onnext(uploadimgbean uploadimgbean) {
            log.i(tag, "onnext: " ); 
            }
          }

          @override
          public void onerror(throwable throwable) {
            log.i(tag, "onerror: --->" + throwable.getmessage());
          }

          @override
          public void oncomplete() {
            log.i(tag, "oncomplete: ");
          }
        });

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网