首先要想进行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’ 并复制。
2.在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: 成功" );
}
});
}