美文网首页
retrofit的请求方式总概(包含binary上传文件方式)

retrofit的请求方式总概(包含binary上传文件方式)

作者: 无灬痕 | 来源:发表于2020-01-10 14:28 被阅读0次

    <meta charset="utf-8">

    一、正常的请求方式

    使用retrofit做解析ApiServse中

    @POST("")

    Observable<需要解析实体类>getList2(@Header("User-Agent") String s);//括号中请求头可为空

    Activity中

    Observable list = getRetrofit("http://www.xxx.com/").create(ApiService.class)

    .getList2("rxl");//如果上面请求头为空这个括号也为空

    getNetData(list);

    二、动态传值方式

    使用retrofit做解析ApiServse中

    @POST("{list}/{newId}/{page}-10.html")

    Observable<需要解析实体类> getList(@Header("User-Agent") String s,

    @Path("list") String list,@Path("newId") String newId,@Path("page")int page);

    Activity中

    Observable list = getRetrofit("http://www.xxxx.com/").create(ApiService.class)

    .getList("rxl","list","T134",0);

    getNetData(list);

    三、拼接参数提交方式

    1、Form表单正常的提交方式

    使用retrofit做解析ApiServse中

    @FormUrlEncoded

    @POST("")

    Observable<需要解析实体类> withParams(@Field("createCollegeId") String createCollegeId,@Field("loginName")String loginName,@Field("password")String password);

    Activity中

    Observable observable = getRetrofit("http://www.xxx.com/").create(ApiService.class)

    .withParams("73","15100133517","a12345");

    getNetData(observable);

    2、map表单提交方式

    使用retrofit做解析ApiServse中

    @FormUrlEncoded

    @POST("")

    Observable<需要解析实体类> withMap(@FieldMap Map params);

    Activity中

    final Map params =new HashMap<>();

    params.put("createCollegeId","73");

    params.put("loginN","15100133517");

    params.put("password","a12345");

    Observable observable = getRetrofit("http://www.xxx.com/").create(ApiService.class)

    .withMap(params);

    getNetData(observable);

    四、带请求体的请求方式(body以json形式传入)

    使用retrofit做解析ApiServse中

    @POST(".")

    Observable <需要解析实体类> getData(@Body RequestBody requestBody);

    Activity中

    MediaType JSON = MediaType.parse("application/json; charset=utf-8");

    RequestBody body = RequestBody.create(JSON,"{"userId":"aadc2d9fe76f4b89bf37ca738e23eafe","channelId":"b9240eee3b0211e8b64c00163e30445d","cursor": 0}");

    Observable observable = getRetrofit("http://www.xxx.com/").create(ApiService.class)

    .withParams(body);

    getNetData( body);

    五、上传文件

    普通表单的上传文件

        File file = new File(fileUrl); 
        RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file);
        MultipartBody.Part body = MultipartBody.Part.createFormData("file", file.getName(), requestFile);
    

    @Multipart
    @POST("xxxxx")
    rx.Observable<ImageLoagBean> uploadFile(@Part MultipartBody.Part file, @Header("fileName")String
    fileName, @Header("tokenId")String tokenId);

    表单的方式上传文件携带参数

    RequestBody block = RequestBody.create(MediaType.parse("text/plain"), "client");
    RequestBody token = RequestBody.create(MediaType.parse("text/plain"),String.valueOf(Hawk.get(AppConfig.Token,"")));

    /**
    * 上传文件
    */
    @Multipart
    @POST("system/webservice/file/upload")
    rx.Observable<UpLoadFileBean> uploadFile(@Part MultipartBody.Part file, @Part("token") RequestBody token ,
    @Part("visitor_id") RequestBody visitor_id, @Part("block") RequestBody block );

    binary方式上传

    这种方式是没有键值对的与表单上传的方式不同,文件以二进制的方式直接放到body里进行上传
    客户端接口代码


    image.png

    客户端代码实现


    image.png

    相关文章

      网友评论

          本文标题:retrofit的请求方式总概(包含binary上传文件方式)

          本文链接:https://www.haomeiwen.com/subject/utzevctx.html