com.android.okhttp,Android OKHttp使用

一、概述

OKHttp是一个十分常用的网络请求框架了,所以一定要学习它的使用,更甚者还需要阅读它的源码和了解实现逻辑。OKHttp官网,OKHttp源码

1、优点如下

网络优化方面:

(1)内置连接池,支持连接复用;

(2)支持gzip压缩响应体;

(3)通过缓存避免重复的请求;

(4)支持http2,对一台机器的所有请求共享同一个socket。

功能方面:

功能全面,满足了网络请求的大部分需求

扩展性方面:

责任链模式使得很容易添加一个自定义拦截器对请求和返回结果进行处理

二、Android Studio中如何集成?

在build.gradle中添加如下的依赖即可:

implementation("com.squareup.okhttp3:okhttp:4.9.0")

三、发送请求

1.Get请求

/**

* get 同步Get同求

*

* @param url url

* @return

*/

public String syncGet(String url) {

String result = null;

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()

.url(url)

.build();

try (Response response = client.newCall(request).execute()) {

result = response.body().string();

} catch (IOException e) {

e.printStackTrace();

}

return result;

}

/**

* get 异步Get同求

*

* @param url url

* @return

*/

public void nonSyncGet(String url, Callback responseCallback) {

String result = null;

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()

.url(url)

.build();

Call call = client.newCall(request);

call.enqueue(responseCallback);

}

2.Post请求

/**

* get 同步Post同求

*

* @param url url

* @return

*/

public String syncPost(String url) {

String result = null;

String json = "test";

OkHttpClient client = new OkHttpClient();

MediaType JSON = MediaType.parse("application/json; charset=utf-8");

RequestBody body = RequestBody.create(JSON, json);

Request request = new Request.Builder()

.url(url)

.post(body)

.build();

Response response = null;

try {

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

if (response.isSuccessful()) {

result = response.body().string();

} else {

throw new IOException("Unexpected code " + response);

}

} catch (IOException e) {

e.printStackTrace();

}

return result;

}

/**

* get 异步Post同求

*

* @param url url

* @return

*/

public void nonSyncPost(String url, Callback responseCallback) {

String json = "test";

OkHttpClient client = new OkHttpClient();

MediaType JSON = MediaType.parse("application/json; charset=utf-8");

RequestBody body = RequestBody.create(JSON, json);

Request request = new Request.Builder()

.url(url)

.post(body)

.build();

try {

client.newCall(request).enqueue(responseCallback);

} catch (Exception e) {

e.printStackTrace();

}

}

3.拦截器的简单使用

/**

* 拦截器的简单使用

*

* @param url url

* @return

*/

public void okInterceptor(String url, Callback responseCallback) {

String json = "test";

OkHttpClient client = new OkHttpClient();

//测试添加拦截器

client.newBuilder().addInterceptor(new TestInterceptor());

MediaType JSON = MediaType.parse("application/json; charset=utf-8");

RequestBody body = RequestBody.create(JSON, json);

Request request = new Request.Builder()

.url(url)

.post(body)

.build();

try {

client.newCall(request).enqueue(responseCallback);

} catch (Exception e) {

e.printStackTrace();

}

}

class TestInterceptor implements Interceptor {

@NotNull

@Override

public Response intercept(@NotNull Chain chain) throws IOException {

Request request = chain.request();

long t1 = System.nanoTime();

Log.i("ok", String.format("Sending request %s on %s%n%s",

request.url(), chain.connection(), request.headers()));

Response response = chain.proceed(request);

long t2 = System.nanoTime();

Log.i("ok", String.format("Received response for %s in %.1fms%n%s",

response.request().url(), (t2 - t1) / 1e6d, response.headers()));

return response;

}

}

4、OKHttp中有哪些有效的常量

b1cf0b574e74

image.png

另外有一篇文章把OKHttp的流程总结的不错,可以参考:神秘网友

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
E/AndroidRuntime: FATAL EXCEPTION: Thread-18 Process: com.example.read, PID: 22568 java.lang.RuntimeException: java.net.UnknownServiceException: CLEARTEXT communication to 192.168.210.113 not permitted by network security policy at com.example.read.upload_serverActivity$1.run(upload_serverActivity.java:111) at java.lang.Thread.run(Thread.java:920) Caused by: java.net.UnknownServiceException: CLEARTEXT communication to 192.168.210.113 not permitted by network security policy at okhttp3.internal.connection.RealRoutePlanner.planConnectToRoute$okhttp(RealRoutePlanner.kt:195) at okhttp3.internal.connection.RealRoutePlanner.planConnect(RealRoutePlanner.kt:152) at okhttp3.internal.connection.RealRoutePlanner.plan(RealRoutePlanner.kt:67) at okhttp3.internal.connection.FastFallbackExchangeFinder.launchTcpConnect(FastFallbackExchangeFinder.kt:118) at okhttp3.internal.connection.FastFallbackExchangeFinder.find(FastFallbackExchangeFinder.kt:62) at okhttp3.internal.connection.RealCall.initExchange$okhttp(RealCall.kt:267) at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.kt:32) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.kt:95) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.kt:84) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.kt:65) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) at okhttp3.internal.connection.RealCall.getResponseWithInterceptorChain$okhttp(RealCall.kt:205) at okhttp3.internal.connection.RealCall.execute(RealCall.kt:158) at com.example.read.upload_serverActivity$1.run(upload_serverActivity.java:106) at java.lang.Thread.run(Thread.java:920) 怎么解决
05-29
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值