OkHttp

作者: android小菜鸡一枚 | 来源:发表于2018-08-16 10:57 被阅读0次

    基本用法
    1.异步GET请求

    Request.Builder requestBuilder = new Request.Builder().url("");
    requestBuilder.method("GET",null);
    Request request = requestBuilder.build();
    OkHttpClient mOkHttpClient = new OkHttpClient();
    Call mcall = mOkHttpClient.newCall(request);
    mcall.enqueue(new Callback(){});
    

    2.异步POST请求

    //多了用FormBody来封装请求的参数,并传递个Request
    RequestBody formBody = new FormBody.Builder().add("key","value").build();
    Request request = new Request.Builder().url().post(formBody).build();
    OkHttpClient mOkHttpClient = new OkHttpClient();
    Call mcall = mOkHttpClient.newCall(request);
    mcall.enqueue(new Callback(){});
    

    3.异步上传文件
    上传文件本身也是一个POST请求,首先定义上传文件类型

    public static final MediaType MEDIA_TYPE_MARKDOWN = 
    MediaType.parse("text/x-markdown;charset=utf-8");
    String filepath = "";
    if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
        filepath = Environment.getExternalStorageDirectory().getAbsolutePath();
    } else{
        return;
    }
    File file = new File(filepath,"wangshu.txt");
    Request request = new Request.Builder().url("")
    .post(RequestBody.create(MEDIA_TYPE_MARKDOWN,file)).build();
    mOkHttpClient.newCall(request).enqueue(new Callback(){});
    

    4.异步下载文件
    5.异步上传Multipart文件

    private static final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png");
    mOkHttpClient = new OkHttpClient();
    RequestBody requestBody = new MultipartBody.Builder().setType(MultipartBody.FORM)
    .addFormDataPart("title","wangshu")
    .addFormDataPart("image","wang.png",RequestBody.create(MEDIA_TYPE_PNG,new File("/sdcard/wangshu.png"))).build();
    
    Request request = new Request.Builder()
    .header("","")
    .url()
    .post(requestBody).build();
    
    mokHttpClient.newCall(request).enqueue(new Callback(){});
    

    6.设置超时时间和缓存
    OkHttp3支持设置连接,写入和读取的超时时间

    OkHttpClient.Builder builder = new OkHttpClient.Bulider()
    .connectTimeout(15,TimeUnit.SECONDS)
    .writeTimeout(20,TimeUnit.SECONDS)
    .readTimeout(20,TimeUnit.SECONDS)
    .cache(new Cache(sdcache.getAbsoluteFile(),cacheSize));
    mOkHttpClient = builder.build();
    

    7.取消请求
    使用call.cancel()可以立即停止一个正在执行的call

    OkHttp请求流程

    创建请求Call,异步的请求创建线程池处理请求,同步的请求通过拦截器发送请求,接着HttpEngine发送请求,有缓存从缓存系统获取Response,无缓存去网络请求获得Response。

    相关文章

      网友评论

          本文标题:OkHttp

          本文链接:https://www.haomeiwen.com/subject/rfetvftx.html