复制就能用系列之Okhttp

首先要想进行android开发的话,网络交互肯定是免不了的。之前一直用的是Android-Async-Http,但后来听说因为android把HttpClient给取消掉了,于是基于HttpClient创建的android-async-http也就失去了继续留下去的必要,所以作者也已经停止了该项目的维护,Android5.0之后便不在推荐在项目中进行使用。所以也是有必要好好学习一下Okhttp了。
(废话很多,看来以后还是要改改啊。😅)

配置

有两种引入的方式,一个是引入Jar包,直接本地使用,第二种方式在Gradle中,直接配置。

使用Jar包

Gradle中使用

使用androidStudio的用户可以直接使用Gradle中引入okHttp。

1.在okHttp的github上面,找到 compile ‘com.squareup.okhttp3:okhttp:3.8.1’ 并复制。
找到使用的Gradle代码
2.在Gradle中进行配置。将刚才复制的代码复制到如图所示的地方,然后点击同步,同步完了之后就会自动引用了。
gradle中的配置

okHttp的基本使用

git请求

一共可以分为4各部分进行来进行使用。

#1.首先建立一个OkHttpClient对象
OkHttpClient okHttpClient = new OkHttpClient();
#2.配置我们的request
Request.Builder builder = new Request.Builder();
Request request = builder
                .get()
                .url("http://192.168.1.4:8000")
                .build();
#3.申明执行该任务的对象
Call call = okHttpClient.newCall(request);
#4.开始执行
call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Log.e("get请求失败");
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                Log.e("get请求成功");
                String str = response.body().string();
                Log.e(str);
            }
        });

post请求

传递key-value对可以使用提交表单的方式

//1.首先创建一个表单
FormBody.Builder formBuilder = new FormBody.Builder();
formBuilder.add("key","value");
//2.通过表单创建自己的requestBody
RequestBody requestBody = formBuilder.build();
//3.创建自己的request。将requestBody作为参数传进去,也就是我们的key-value对
Request.Builder builder = new Request.Builder();
Request request = builder
        .post(requestBody)
        .url(url)
        .build();
//4.使用call方法,执行语句
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
    @Override
    public void onFailure(Call call, IOException e) {
        Log.e(TAG, "onFailure: " );
    }
    @Override
    public void onResponse(Call call, Response response) throws IOException {
        String str = response.body().string();
        Log.e(TAG, "onResponse: "+str.toString() );
    }
});

upload一张图片

其实也是通过post的方法实现上传,只不过是把我们的参数换成了文件,而不是key-value对

public static void upLoadFile(String url,String filepath){
//检测传来的文件是否存在
    File file = new File(filepath);
    if(!file.exists()){
        Log.e(TAG, "upLoadFile: 文件不存在");
        return;
    }
    RequestBody requestBodyfile = RequestBody.create(MediaType.parse("application/octet-stream"),file);
    //构建一个文件类型的requestBody
    MultipartBody.Builder mulitiparBuilder = new MultipartBody.Builder();
    //这里也可以通过键值对的方式实现添加参数
    RequestBody requestBody = mulitiparBuilder
            .setType(MultipartBody.FORM)
            //addFormDataPart(用于服务器识别的标识,服务器接收后文件的名字,文件-requestBody)
            .addFormDataPart("mPhoto", "photo.jpg", requestBodyfile)
            .build();

    Request.Builder builder = new Request.Builder();
    Request request = builder.url(url)
        .post(requestBody)
        .build();

    Call call =  new OkHttpClient().newCall(request);
    call.enqueue(new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {
            Log.e(TAG, "onFailure: 失败");
        }
        @Override
        public void onResponse(Call call, Response response) throws IOException {
            Log.e(TAG, "onResponse: 成功" );
        }
    });
}
如果文章对您有用请随意打赏,谢谢支持!