首页 > 其他分享 >OKHttp

OKHttp

时间:2023-04-11 15:48:30浏览次数:36  
标签:request Request OkHttpClient call OKHttp new response

OkHttp默认使用长连接(HTTP Keep-Alive)来复用TCP连接,以减少多次握手建立连接的时间和资源浪费。

常用方法如下:
1.创建OkHttpClient对象

    OkHttpClient client = new OkHttpClient();

2.创建Request对象

    Request request = new Request.Builder()
                          .url(url)
                          .build();

3.发送请求并获取响应

    Response response = client.newCall(request).execute();
    if (response.isSuccessful()) {
        String result = response.body().string();
    }

4.设置超时时间

  OkHttpClient client = new OkHttpClient().newBuilder()
          .connectTimeout(10, TimeUnit.SECONDS)//连接超时时间
          .writeTimeout(10, TimeUnit.SECONDS)//写入超时时间
          .readTimeout(30, TimeUnit.SECONDS)//读取超时时间
          .build();

5.异步请求

  client.newCall(request).enqueue(new Callback() {
      @Override
      public void onFailure(Call call, IOException e) {
          //请求失败
      }

      @Override
      public void onResponse(Call call, Response response) throws IOException {
          if (response.isSuccessful()) {
              String result = response.body().string();
          }
      }
  });

6.发送POST请求

  RequestBody requestBody = new FormBody.Builder()
          .add("param1", "value1")
          .add("param2", "value2")
          .build();

  Request request = new Request.Builder()
          .url(url)
          .post(requestBody)
          .build();

  Response response = client.newCall(request).execute();

7.发送文件

  File file = new File(Environment.getExternalStorageDirectory(), "test.txt");
  RequestBody requestBody = new MultipartBody.Builder()
          .setType(MultipartBody.FORM)
          .addFormDataPart("file", file.getName(), RequestBody.create(MediaType.parse("application/octet-stream"), file))
          .build();

  Request request = new Request.Builder()
          .url(url)
          .post(requestBody)
          .build();

  Response response = client.newCall(request).execute();

8.取消请求

	Call call = client.newCall(request);
	call.enqueue(new Callback() {
		 @Override
		 public void onFailure(Call call, IOException e) {

      }

      @Override
      public void onResponse(Call call, Response response) throws IOException {

      }
  });

  //取消请求
  call.cancel();

enqueue()

方法发送异步网络请求并将响应通过回调函数的方式返回,其中已经默认开启了一个工作线程执行网络请求和数据解析,并在主线程上执行回调函数。这样可以避免在主线程中阻塞UI操作。
其内部则利用了Java中的线程池技术,即使用 ThreadPoolExecutor 来管理线程池,执行网络请求任务并处理响应结果。当创建 OkHttpClient 对象时,默认最大线程数(默认值为 5)是从 Runtime 中获取可用于此进程的处理器数量及其它系统参数来动态计算得出的,但也可以通过构建一个新的 Dispatcher 实例并设置线程池的最大线程数来覆盖默认值。
以下是 enqueue() 方法以及常见的一些方法的示例:

	// 创建 OkHttpClient.Builder 实例
              OkHttpClient.Builder builder = new OkHttpClient.Builder();
        //  可以对 OkHttp 的相关属性进行配置
              builder.connectTimeout(10, TimeUnit.SECONDS);
              builder.readTimeout(10, TimeUnit.SECONDS);
              builder.writeTimeout(10, TimeUnit.SECONDS);

        // 构建 OkHttpClient 对象
              OkHttpClient client = builder.build();

        // 创建 Request 对象
              Request request = new Request.Builder()
                  .url("http://www.example.com")
                  .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 {
              // 处理响应成功情况
              String responseBody = response.body().string();
              // ...
          }
         });

常见的方法包括:

  •   newCall(Request request):创建 Call 对象,用于取消或者执行请求。
    
  •   call.execute():同步请求,会阻塞当前线程直到请求完成。
    
  •   call.enqueue(Callback callback):异步请求,通过回调函数处理响应结果。
    

标签:request,Request,OkHttpClient,call,OKHttp,new,response
From: https://www.cnblogs.com/fuunnyy/p/17306425.html

相关文章

  • OKHttp库都用到了哪些设计模式
    Builder模式:用于构建OkHttpClient、Request和Response等类的对象,以实现链式调用和可配置性。Singleton模式:用于创建OkHttpClient和Dispatcher等类的单例对象,以确保全局只有一个实例。Factory模式:用于创建Call和WebSocket等类的对象,以隐藏对象的创建细节并提供灵活性。C......
  • Okhttp 的 retrofit2 运行警告信息异常
    最近在使用一个okhttp的项目运行的时候得到下面的警告信息。WARNING:AnillegalreflectiveaccessoperationhasoccurredWARNING:Illegalreflectiveaccessbyretrofit2.Platform(file:/C:/Users/yhu/.m2/repository/com/squareup/retrofit2/retrofit/2.9.0/retrofit-2.......
  • Okhttp3中设置超时的方法
    场景SSM项目中使用Okhttp3请求接口,进行junit单元测试时提示连接超时:java.net.SocketTimeoutException 实现找到新建OkHttpClient对象的地方:OkHttpClientclient=newOkHt......
  • okhttp Interceptor
    Interceptor介绍okhttp的拦截器就是将整个请求网络的过程的每一步都封装在不同的Interceptor里,这样说可能有点绕,简单点说就是把一个List里的Interceptor都顺序执行一遍,那......
  • okhttp之复习
    一okhttp 1.简介:官方简介:OkHttp是一个默认高效的HTTP客户端1、HTTP2支持允许对同一主机的所有请求共享一个套接字。2、透明GZIP缩小了下载大小。3、连接池减少了请求......
  • Okhttp 如何构建一个 Get 的 URL
    因项目的需要,构建一个微信请求的URL。URL的配置为:https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=......
  • OKHttpUtil搞定Http请求
    一、OKHttpUtil功能根据URL自动判断是请求HTTP还是HTTPS,不需要单独写多余的代码。默认情况下Cookie自动记录,比如可以实现模拟登录,即第一次访问登录URL后后续请求就是登......
  • Okhttp常用方法示例
    这是我用到的一个util类1publicclassHttpBaseService{23privateOkHttpClientclient=newOkHttpClient();4privatestaticfinalMediaTypeJ......
  • OKHTTP
    @Testpublicvoidtest1(){try{OkHttpClientok=newOkHttpClient();RequestBodyrequestBody=newFormBody.Builder().add("......
  • okhttp 的使用
    okhttp的使用 ①在OKHTTP的GitHub上下载 jar包或者添加grad'le依赖 OKHTTP的地址:https://github.com/square/okhttp    ②导入jar包不想导入j......