OkHttpClient之修改头像如何上传给后台

第一步
创建OkHttpClient对象

  • 使用构造方法直接创建OkHttpClient
OkHttpClient client = new OkHttpClient();
  • 使用Builder模式创建对象
OkHttpClient.Builder builder = new OkHttpClient.Builder();//先创建构建者对象
builder.connectTimeout(3*1000,TimeUnit.MILLISECONDS);//设置超时时间
OkHttpClient client = builder.build();//使用构建者创建OkHttpClient对象

区别

  • 使用Bulider模式创建OkHttpClient对象,先得到Bulider对象,在通过代码创建OkHttpClient,这中间可以根据需要修改Bulider对象的一些字段值
  • 使用构造方法创建OkHttpClient对象则是一步操作,不能更改任何字段值

第二步
Request对象的创建
get请求时创建Request对象的代码如下:

Request request = new Request.Builder().url("/").build();

这是一种Builder设计模式,先创建Builder对象,给Builder对象的属性赋值,再用build方法创建Request对象,最后把builder的值赋给Request对象
在Request的内部类Builder的无参构造源码中默认把Builder的请求方法设置为GET,所以使用get请求不需要再次设置请求方式

缺少Call对象的创建
缺少RealCall的execute方法实现同步请求
缺少RealCall的enqueue方法实现异步请求

第三步
讲解Request.Builder类的post方法
该方法作用是设置post请求的请求体,接收的参数是RequestBody类及子类对象

  • RequestBody类及其核心方法
    1.public abstract MediaType contentType()//数据类型
    2public long contentLength()//数据长度
    3public abstract void writeTo(BufferedSink sink)//写操作

  • RequestBody类的create方法
    重要方法有两个
    1.create(final MediaType contentType,final byte[] content,final int offset,final int byteCount)
    //创建上传byte数据的RequestBody对象
    2.create(final MediaType contentType, final File file)
    //创建上传File数据的RequestBody对象

第四步
MultipartBody类
多重body的类
既可以上传键值对数据,又可以上传File数据
微信发朋友圈要上传文字+图片 就可以用到这个
基本代码

MultipartBody body = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("groupId",""+groupId)//添加键值对参数
.addFormDataPart("title","title")
.addFormDataPart("file",file.getName(),RequestBody.create(MediaType.parse("file/"),file))//添加文件

看addFormDataPart方法

  • addFormDataPart(String name,String value)
    添加键值对数据
  • addFormDataPart(String name,String filename,RequestBody body)
    添加File数据

添加File数据的流程如下:
1.将File对象得到body对象
2.将name和Filename封装到Header对象
3.将Header对象和body对象传递给part对象,然后将part对象放入Builder的字段parts集合中

下面演示一次正确的上传文字和图片的代码

List<MultipartBody.Part> part = null;
 File file = new File(imagUrl);
                MultipartBody.Builder builder = new MultipartBody.Builder()
                        .setType(MultipartBody.FORM)
                        .addFormDataPart("userId", mId);
                RequestBody imgBody = RequestBody.create(MediaType.parse("multpart/form-data"), file);
                builder.addFormDataPart("file", file.getName(), imgBody);
                part = builder.build().parts();

ps:用addFormDataPart上传File数据时,需要创建RequestBody对象,所以这里先创建好再传入进去

分析:
写给后台的Service

submitImage(@Part List<MultipartBody.Part> partList);

传给后台一个MultiPart集合,他们进行解析
所以安卓端是创建一个List集合传给后台

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值