OKhttp 简单使用

/**
 * 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();









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值