简单说一下学习okhttp的理由
以上是okhttp官网http://square.github.io/okhttp/以及结合网上的一些理解整理出来的,看到有不对的地方还望大家多多指出
下面我们就开始学习怎么使用okhttp吧
github地址:https://github.com/square/okhttp
在builde.gradle里面添加上
compile 'com.squareup.okhttp3:okhttp:3.4.1'
在AndroidManifest.xml添加所需权限
name="android.permission.INTERNET" />
通过get请求获取指定URL网页请求,这里要注意的是Android4.0以后需要在非主线程里使用。
private OkHttpClient client = new OkHttpClient();
public static void get(){
//创建一个Request
Request request = new Request.Builder()
.url("http://www.jianshu.com/")
.get()
.build();
//发起异步请求,并加入回调
client.newCall(request).enqueue(new Callback()
{
@Override
public void onFailure(Call call,IOException e){
//请求失败回调
}
@Override
public void onResponse(Call call,Response response) throws IOException{
//请求成功回调
Log.e("okHttp","get="+response.body().string());
}
});
}
private OkHttpClient client = new OkHttpClient();
public static void post(){
//创建Form表单对象,可以add多个键值队
FormBody formBody = new FormBody.Builder()
.add("param","value")
.add("param","value")
.build();
//创建一个Request
Request request = new Request.Builder()
.url("http://www.jianshu.com/")
.post(formBody)
.build();
//发起异步请求,并加入回调
client.newCall(request).enqueue(new Callback()
{
@Override
public void onFailure(Call call,IOException e){
}
@Override
public void onResponse(Call call,Response response) throws IOException{
Log.e("okHttp","post="+response.body().string());
}
});
}
把client.newCall(request).enqueue(new Callback())
改成client.newCall(request).execute().body().string()
即可
public static void upload(){
//多个文件集合
List<File> list = new ArrayList<>();
MultipartBody.Builder builder = new MultipartBody.Builder();
//设置为表单类型
builder.setType(MultipartBody.FORM);
//添加表单键值
builder.addFormDataPart("param","value");
for (File file : list) {
//添加多个文件
RequestBody fileBody = RequestBody.create(MediaType.parse("application/octet-stream"), file);
builder.addFormDataPart("files", file.getName(), fileBody);
}
Request request = new Request.Builder()
.url("http://192.168.1.8/upload/UploadServlet")
.post(builder.build())
.build();
//发起异步请求,并加入回调
mOkHttpClient.newCall(request).enqueue(new Callback()
{
@Override
public void onFailure(Call call,IOException e){
}
@Override
public void onResponse(Call call,Response response) throws IOException{
Log.e("okHttp","updLoad="+response.body().string());
}
});
}
public static void setTimeout(){
mOkHttpClient.newBuilder()
.connectTimeout(10, TimeUnit.SECONDS)//10秒连接超时
.writeTimeout(10, TimeUnit.SECONDS)//10m秒写入超时
.readTimeout(10, TimeUnit.SECONDS)//10秒读取超时
.build();
}
client.newCall(request).execute().body().byteStream()