Okhttp的简单使用

        现在市面上比较火热的Android网络框架,就我知道的,volley,okhttp,retrofit+rxjava,当然rxjava不算是网络框架,只是配合retofit使用更为方便,volley是我使用得比较多的一个网络框架,但是用他来做轻量的数据请求自是没问题,但是在下载和上传文件上,似乎就会暴露一些问题,啥问题我也不知道,因为我只是菜鸟,这些东西也是一个自己的理解,如果有错误的地方,勿喷。

         下面就进入正题,本来我是想使用retrofit,但是我又想一口吃成胖子,对于rxjava的学习上堵住,所以转战okhttp,以下则是我对okhttp的一些理解和使用:

          因为我用的是Android Studio,所以首先依赖

compile'com.squareup.okhttp3:okhttp:3.4.2'

  ,依赖完以后就可以使用了,首先:

private OkHttpClient okHttpClient;

private Request request;

private Call call;

因为不管是get请求,post请求,还是上传下载文件,都需要这三个,总不能一个文件就新建一个对象吧,然后我在构造函数中实例化了

public Http OkHttp() {

okHttpClient=new OkHttpClient();

}

,get请求如下:

public Call getOkhttp() {

             request=new Request.Builder()

                                                      .url(url)

                                                      .build();

              call=okHttpClient.newCall(request);

              return call;

}

我是把call直接返回出来,这样我用着舒服些, 正规写法如下:

public void getOkhttp() {

request=newRequest.Builder()

.url(url)

.build();

call=okHttpClient.newCall(request);

call.enqueue(new Callback() {

@Override

public void onFailure(Call call,IOException e) {

//这里面试请求错误调用

}

@Override

public void onResponse(Call call,Response response) throws IOException{

//这是是请求成功返回的

//得到返回信息则是 response.body().string()

}

});

}

,post请求如下:

public Call postOkhttp(RequestBody requestBody) {

request=new Request.Builder()

.url(url)

.post(requestBody)

.build();

call=okHttpClient.newCall(request);

return call;

}

键值对我是将其提取出来,定义如下:

RequestBody requestBody=new FormBody.Builder()

.add("key","valuse")

.build();

add方法则是往里面加入请求体,使用还是很简单的,

上传文件如下:

public Call FileOkhttp(String filename,String key) {

File file=new File(Environment.getExternalStorageDirectory(), filename);

RequestBody fileBody=RequestBody.create(MediaType.parse("application/octet-stream"),file);

RequestBody requestBody=new MultipartBody.Builder()

                                                                                       .setType(MultipartBody.FORM)

                                                                                       .addPart(Headers.of("Content-Disposition","form-data; name=\"username\""),

                                                                                        RequestBody.create(null, key))//上传文件名

                                                                                        .addPart(Headers.of("Content-Disposition","form-data; name=\"mFile\"; filename =\"wjd.mp4\""),fileBody)

                                                                                         .build();

request=new Request.Builder()

                                         .url(url)

                                          .post(requestBody)

                                           .build();

call=okHttpClient.newCall(request);

return call;

}

你可能感兴趣的:(Okhttp的简单使用)