/** * 1.同步请求 * 2。异步请求 */
同步请求 默认不设置都是GET方式请求
//同步请求 //创建OkHttpClient对象 //创建request //发起请求execute() OkHttpClient client = new OkHttpClient.Builder() .connectTimeout(10, java.util.concurrent.TimeUnit.SECONDS) // .authenticator() .build(); Request request = new Request.Builder() .url("http://www.ifeng.com") .build(); final Call call = client.newCall(request); new Thread(new Runnable() { @Override public void run() { //同步请求 try { Response response = call.execute(); String string = response.body().string(); Log.i("TAG", "run: string---------" + string); } catch (IOException e) { e.printStackTrace(); } } }).start();
异步请求
//异步请求 //创建OkHttpClient对象 //创建request //发起请求enqueue() OkHttpClient client = new OkHttpClient.Builder() .connectTimeout(5, java.util.concurrent.TimeUnit.SECONDS) // .authenticator() .build(); Request request = new Request.Builder() .url("http://www.baidu.com") .build(); Call call = client.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { Log.i("TAG", "onFailure: call---------" ); } @Override public void onResponse(Call call, Response response) throws IOException { Log.i("TAG", "onResponse: ---------" + Thread.currentThread().getName()); if (response.isSuccessful()) { Headers headers = response.headers(); Set<String> names = headers.names(); for (String name : names) { Log.i("TAG", "onResponse: name---------" + name+":::"+headers.get(name)); } Log.i("TAG", "onResponse: response.body()---------" + response.body().string()); } } });
上传参数
下面省略前后 只是上传参数配置
get方式上传
Request builder = new Request.Builder() .url("http://10.2.155.14:8080/upload?username=zhuangsan&password=1234") .build();post方式上传
/**post通过IO流向服务端传递数据 * @param view */ MediaType mediaType = MediaType.parse("application/json;charest=utf-8”);//parse是固定的形式 JSONObject json = new JSONObject();//使用json字符串方式构造字符串 try { json.put("username","zhangsan"); json.put("password","hehehe"); } catch (JSONException e) { e.printStackTrace(); } RequestBody body1 = RequestBody.create(mediaType,json.toString());//构造请求参数 Request build = new Request.Builder() .url("http://10.2.155.14:8080/upload”) //服务器地址 .post(body1)//构造的上传参数 .build();
…...
/**post通过表单方式上传 * @param view */ //FormBody 继承RequestBody 所以直接可以在post中 :: 添加参数适用add方法 FormBody body1 = new FormBody.Builder().add("username","wangwu").add("heheheh","heheh").build(); Request build = new Request.Builder() .url("http://10.2.155.14:8080/upload") .post(body1) //构造body .build();
上传文件:
/**设置从九大功能目录中上传一个文件到服务器 */ //设置上传到文件所在目录 File flie = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS); //设置上传文件类型 MediaType media = MediaType.parse("application/octet-stream"); //设置上传文件主体 RequestBody body = RequestBody.create(media, new File(flie, "111.apk")); //构建请求 Request build = new Request.Builder() .url(url) .post(body) .build();
设置缓存 策略
CacheControl cc = new CacheControl.Builder() //不使用缓存,但是会保存缓存数据 //.noCache() //不使用缓存,同时也不保存缓存数据 // .noStore() //只使用缓存,(如果我们要加载的数据本身就是本地数据时,可以使用这个,不过目前尚未发现使用场景) //.onlyIfCached() //手机可以接收响应时间小于当前时间加上10s的响应 .minFresh(10,TimeUnit.SECONDS) //手机可以接收有效期不大于10s的响应 .maxAge(10,TimeUnit.SECONDS) //手机可以接收超出5s的响应 .maxStale(5,TimeUnit.SECONDS) .build(); Request request = new Request.Builder() .cacheControl(cc) .url("http://192.168.152.2:8080/cache").build();
/**设置缓存 */ final TextView viewById = (TextView) findViewById(R.id.text); OkHttpClient build = new OkHttpClient.Builder() //设置缓存位置 大小 .cache(new Cache(this.getExternalCacheDir(), 10 * 1024 * 1024)) .build(); // CacheControl cacheControl = new CacheControl.Builder().build(); final Request request = new Request.Builder().url(urlcan) //设置缓存策略 可以不设置 自动缓存 // .cacheControl(cacheControl) .build();