首页 > 学院 > 开发设计 > 正文

OkHttp的使用

2019-11-09 18:43:46
字体:
来源:转载
供稿:网友

导入

首先如果使用eclipse 需要下载最新的jar包最新jar

如果使用android studio 则需要加入 compile“com.squareup.okhttp3:okhttp:3.6.0”

1 get请求

1 首先需要发送一个get请求步骤 首先需要构造一个request对象 参数最起码需要一个url 可以通过Request.Builder设置更多参数2 然后通过request对象去构造得到一个Call对象 相当于封装成了一个任务 然后就会有execute()和cancle()方法3 最后我们用异步方式执行请求 调用了call.enqueue将call加入调度队列中然后等待任务执行完成 然后在callback中就可以得到结果比如获取一个网页内容//首先需要创建okhttpclient对象okHttpClient client = new OkHttpClient();//创建一个request请求final Request request = new Request.Builer().url("https://github.com/kristch").build();// new callCall call = client.newCall(request);//请求加入调度call.enqueue(new Callback(){@Override  publicvoidonFailure(Request request, IOException e)  {  }  @Override  publicvoidonResponse(final Response response) throws IOException { //String htmlStr = response.body().string();  }  });可以简单封装okHttpclient client = new OkhttpClient();String runGet(String url)throws IOException{Request request = new Request.Builder().url("https://github.com/kristch").build();Response reponse = client.newCall(request).execute();if(reponse.isSuccesssful()){return response.body().string();}else{throw new IOException();}

2 Post

2.1提交键值对

FormEncodingBuilder builder =new FormEncodingBuilder();  builder.add("username","123");Request request =new Request.Builder().url(url).post(builder.build()) .build();mOkHttpClient.newCall(request).enqueue(new Callback(){});post的时候,参数是包含在请求体中的;所以我们通过FormEncodingBuilder。添加多个String键值对,然后去构造RequestBody,最后完成我们Request的构造简单封装okhttpclient client = new Okhttpclient();String post(String url) throws Exception{RequestBody formBody = new FormEncodingbuilder();formBody.add("username","123");Request request = new Request.Builder().url(url).post(formBody).build();Response response = client.new Call(request).execute();if(response.isSuccessful()){return response.body().string();}else{}}

2.2 post提交json数据

public static final MediaType JSON = MediaType.parse("application/json",charset=utf-8);okhttpClient client = new OkhttpClient();String post(String url,String json)throws IOException{RequestBody body = RequestBody.create(JSON,json);Request request = new Request.Builder(url).url().post(body).build();Response response = client.newCall(request).execute();

if(response.isSuccessful()){

return response.body().string();}else{}

3 http文件上传

一个可以构造RequestBody的builder 叫做MultipartBuilder 当我们需要做类似于表单的上传上传的时候就可以用这个File file = new File(Environment.getExternalStorageDirectory(),"demo.mp4");RequestBody fileBody = RequestBody.create(MeidaType.parse("application/octet-stream"), file));RequestBody requestbody = new MultipartBuilder().type(MultipartBuilder.FORm) .addPart(Headers.of( "Content-Disposition","form-data; name=/"username/""), RequestBody.create(null,"123")) .addPart(Headers.of( "Content-Disposition","form-data; name=/"mFile/"; filename=/"wjd.mp4/""), fileBody) .build();Request request = new Request.Builder().url(url).post(requestbody).build();Call call = new OkhttpClient().newCall(request);call.enqueue(new Callback(){});这段代码是向服务器传递了一个键值对username:123和一个视频文件,MultipartBuilder的addPart方法可以添加键值对或者文件4 文件下载下载一个文件 用string形式打印响应体 如果小文档可以十分方便如果太大不要使用这个方法需要使用流的方式来处理bodyPRivate final OkhttpClient client = new OkhttpClient();public void run()throws Exception{Rquest request = new Requst.Builder().url(url).build();Response response = client.newCall(request).execute();if(!response.isSuccessful())throw new IOException(""+response);Headers res= response.headers();for(int i=0;i<res.size();i++){syso(res.name(i)+":"+res.value(i));}syso(res.body().string);}也可以client.newCall(request).enqueue(new Callback(){onFilure(){throwable.printStackTrace();}onResponse(){if(!response.isSuccessful())throw new IOException(""+response);Headers res= response.headers();for(int i=0;i<res.size();i++){syso(res.name(i)+":"+res.value(i));}syso(res.body().string);}});转载来自:张鸿洋博客 和泡在网上的日子的文章


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表