如何高效的使用Okhttp
1. 启用文件系统上的响应缓存
默认情况下,Okhttp不支持响应缓存,包括HTTP Cache-Control头允许缓存响应。因此,客户端通过一次又一次的请求相同的资源浪费时间和带宽。而不是简单地读取初始响应后缓存的副本。
要在文件系统中启用响应缓存,需要配置com.squareup.okhttp.Cache实例,并把它传递给你的OkHttpClient实例的setCache方法。你必须初始化缓存与存放目录的文件,并以字节为单位的最大值。
响应返回数据可以写入给定目录文件,如果一个响应的缓存超过了给定的大小。我们可以采取 LRU policy 。
我们可以在 stackoverflow 查看 Jesse Wilson 的回复。我们可以通过context.getCacheDir()在子目录中缓存我们的响应:
// Base directory recommended by http://stackoverflow.com/a/32752861/400717.
// Guard against null, which is possible according to
// https://groups.google.com/d/msg/android-developers/-694j87eXVU/YYs4b6kextwJ and
// http://stackoverflow.com/q/4441849/400717.
final @Nullable File baseDir = context.getCacheDir();
if (baseDir != null) {
final File cacheDir = new File(baseDir, "HttpResponseCache");
okHttpClient.setCache(new Cache(cacheDir, HTTP_RESPONSE_DISK_CACHE_MAX_SIZE));
}
// Base directory recommended by http://stackoverflow.com/a/32752861/400717.
// Guard against null, which is possible according to
// https://groups.google.com/d/msg/android-developers/-694j87eXVU/YYs4b6kextwJ and
// http://stackoverflow.com/q/4441849/400717.
final @NullableFilebaseDir = context.getCacheDir();
if (baseDir != null) {
final FilecacheDir = new File(baseDir, "HttpResponseCache");
okHttpClient.setCache(new Cache(cacheDir, HTTP_RESPONSE_DISK_CACHE_MAX_SIZE));
}
在可汗学院的程序中我们指定 HTTP_RESPONSE_DISK_CACHE_MAX_SIZE as 10 * 1024 * 1024 , or 10 MB的大小
2. 集成Stetho
Stetho 是Facebook的一个可爱的库,可以使用Chrome浏览器的Chrome开发人员工具功能来检查你的Andr oid应用程序。
Stetho除了允许你检查你的应用程序的SQLite数据库,还可以查看View的层次结构。允许你检查由OkHttp发起的每个请求和响应:
这种自省机制是确保服务器返回允许资源缓存的HTTP头是非常有用的,以及验证没有请求时,保证缓存的资源存在。
要想使用Stetho,只需添加一个StethoInterceptor实例的网络拦截器列表:
okHttpClient.networkInterceptors().add(new StethoInterceptor());
okHttpClient.networkInterceptors().add(new StethoInterceptor());
然后,运行应用程序,打开浏览器后,输入chrome://inspect。然后你就会看到应用程序的设备和标识符的列表。然后鼠标右键选择inspect 打开开发者工具,然后打开新的tab,开始监控OkHttp请求。
3. 使用Picasso 和 Retrofit
你可能使用过 Picasso 来加载网络图片,或者使用 Retrofit 来简化发出请求和解码响应。这些第三方库将隐式地创建自己的OkHttpClient供内部使用,如果你不明确指定一个。
Picasso version 2.5.2的OkHttpDownloader类:
private static OkHttpClient defaultOkHttpClient() {
OkHttpClient client = new OkHttpClient();
client.setConnectTimeout(Utils.DEFAULT_CONNECT_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
client.setReadTimeout(Utils.DEFAULT_READ_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
client.setWriteTimeout(Utils.DEFAULT_WRITE_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
return client;
}
private static OkHttpClientdefaultOkHttpClient() {
OkHttpClientclient = new OkHttpClient();
client.setConnectTimeout(Utils.DEFAULT_CONNECT_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
client.setReadTimeout(Utils.DEFAULT_READ_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
client.setWriteTimeout(Utils.DEFAULT_WRITE_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
return client;
}
Retrofit也有类似的工厂方法来创建自己的OkHttpClient。
图片一般在应用程序中需要加载的比较大的资源。尽管Picasso自己维护它的LRU机制来缓存图片,在内存中严格执行。如果客户端尝试使用Picasso来加载图片。Picasso会找不到其在内存中缓存图像,然后将委托加载该图片到它的内部OkHttpClient实例。并且默认情况下该实例将始终从服务器加载图片资源。
作为defaultOkHttpClient的方法不能与上面提到的文件系统中的响应缓存配置结合起来。
指定你自己的OkHttpClient实例允许返回数据从文件系统缓存响应,图片不会从服务器加载。这是非常重要的在程序第一次启动以后。这个时候Picasso的内存缓存是冷的。所以它会频繁的委托OkHttpClient实例去加载图片。
这就需要构建配置了您Picasso 的OkHttpClient实例,如果你在你的代码中使用
Picasso.with(context).load(...)
Picasso.with(context).load(...)
加载图片,你是用的是Picasso的单例模式。这是通过with方法懒汉模式地实例化并配置自己的OkHttpClient。因此,我们必须使我们自己的Picasso实例在单例之前通过wiht方法调用。
实现这个,可以简单的将OkHttpClient实例封装在OkHttpDownloader中,然后传递给 Picasso.Builder 实例的downloader方法。
final Picasso picasso = new Picasso.Builder(context)
.downloader(new OkHttpDownloader(okHttpClient))
.build();
// The client should inject this instance whenever it is needed, but replace the singleton
// instance just in case.
Picasso.setSingletonInstance(picasso);
final Picassopicasso = new Picasso.Builder(context)
.downloader(new OkHttpDownloader(okHttpClient))
.build();
// The client should inject this instance whenever it is needed, but replace the singleton
// instance just in case.
Picasso.setSingletonInstance(picasso);
在Retrofit中要使用OkHttpClient实例,需要改造1.9.x的一个RestAdapter,需要将OkHttpClient封装OkClient的实例中。然后把它传递给RestAdapter.Builder实例的setClient方法。
restAdapterBuilder.setClient(new OkClient(httpClient));
restAdapterBuilder.setClient(new OkClient(httpClient));
在 Retrofit 2.0中只需要简单的将OkHttpClient传递给Retrofit.Builder实例的client方法。
在可汗学院的APP中我们通过 Dagger 依赖注入来确保我们只有一个OkHttpClient的实例。这种方法同样也适用于Picasso和Retrofit我们提供了一个为OkHttpClient实例提供单例模式的注解示例:
@Provides
@Singleton
public OkHttpClient okHttpClient(final Context context, ...) {
final OkHttpClient okHttpClient = new OkHttpClient();
configureClient(okHttpClient, ...);
return okHttpClient;
}
@Provides
@Singleton
public OkHttpClientokHttpClient(final Contextcontext, ...) {
final OkHttpClientokHttpClient = new OkHttpClient();
configureClient(okHttpClient, ...);
return okHttpClient;
}
OkHttpClient将会通过Dagger的注解创建一个实例提供给我们的Picasso和Retrofit。
我猜想题主是想开发一款APP来练练手,但有些开源库,框架之类不是很熟悉。刚好前几天在知乎回答过类似的问题,这里再补充下 网络模块 okhttp android-async-http volley 事件总线 otto EventBus 依赖注入 Dagger RoboGuice ButterKnife 图片模块 Fresco Glide picasso 数据库模块 greenDao ormlite LitePal 响应式编程 RxJava RxAndroid 日志输出 logger android-CLog KLog 测试相关 testerhome 测试社区,里面有很多干货 bugtags 新一代的、专为移动测试而生的缺陷发现及管理工具 testin 为移动测试而生 Emmagee 网易出品的,是监控指定被测应用在使用过程中占用机器的CPU、内存、流量资源的性能测试小工具。 awesome-android-testing A curated list of awesome androi..
OkHttp 是一个在开发可汗学院Android APP过程中非常重要的依赖库。它的默认的配置为我们提供了非常重要实用功能,下面一些步骤我们可以让Okhttp提供更多功能使用灵活和内省能力。1. 启用文件系统上的响应缓存
默认情况下,Okhttp不支持响应缓存,包括HTTP Cache-Control头允许缓存响应。因此,客户端通过一次又一次的请求相同的资源浪费时间和带宽。而不是简单地读取初始响应后缓存的副本。
要在文件系统中启用响应缓存,需要配置com.squareup.okhttp.Cache实例,并把它传递给你的OkHttpClient实例的setCache方法。你必须初始化缓存与存放目录的文件,并以字节为单位的最大值。
响应返回数据可以写入给定目录文件,如果一个响应的缓存超过了给定的大小。我们可以采取 LRU policy 。
我们可以在 stackoverflow 查看 Jesse Wilson 的回复。我们可以通过context.getCacheDir()在子目录中缓存我们的响应:
// Base directory recommended by http://stackoverflow.com/a/32752861/400717.
// Guard against null, which is possible according to
// https://groups.google.com/d/msg/android-developers/-694j87eXVU/YYs4b6kextwJ and
// http://stackoverflow.com/q/4441849/400717.
final @Nullable File baseDir = context.getCacheDir();
if (baseDir != null) {
final File cacheDir = new File(baseDir, "HttpResponseCache");
okHttpClient.setCache(new Cache(cacheDir, HTTP_RESPONSE_DISK_CACHE_MAX_SIZE));
}
// Base directory recommended by http://stackoverflow.com/a/32752861/400717.
// Guard against null, which is possible according to
// https://groups.google.com/d/msg/android-developers/-694j87eXVU/YYs4b6kextwJ and
// http://stackoverflow.com/q/4441849/400717.
final @NullableFilebaseDir = context.getCacheDir();
if (baseDir != null) {
final FilecacheDir = new File(baseDir, "HttpResponseCache");
okHttpClient.setCache(new Cache(cacheDir, HTTP_RESPONSE_DISK_CACHE_MAX_SIZE));
}
在可汗学院的程序中我们指定 HTTP_RESPONSE_DISK_CACHE_MAX_SIZE as 10 * 1024 * 1024 , or 10 MB的大小
2. 集成Stetho
Stetho 是Facebook的一个可爱的库,可以使用Chrome浏览器的Chrome开发人员工具功能来检查你的Andr oid应用程序。
Stetho除了允许你检查你的应用程序的SQLite数据库,还可以查看View的层次结构。允许你检查由OkHttp发起的每个请求和响应:
这种自省机制是确保服务器返回允许资源缓存的HTTP头是非常有用的,以及验证没有请求时,保证缓存的资源存在。
要想使用Stetho,只需添加一个StethoInterceptor实例的网络拦截器列表:
okHttpClient.networkInterceptors().add(new StethoInterceptor());
okHttpClient.networkInterceptors().add(new StethoInterceptor());
然后,运行应用程序,打开浏览器后,输入chrome://inspect。然后你就会看到应用程序的设备和标识符的列表。然后鼠标右键选择inspect 打开开发者工具,然后打开新的tab,开始监控OkHttp请求。
3. 使用Picasso 和 Retrofit
你可能使用过 Picasso 来加载网络图片,或者使用 Retrofit 来简化发出请求和解码响应。这些第三方库将隐式地创建自己的OkHttpClient供内部使用,如果你不明确指定一个。
Picasso version 2.5.2的OkHttpDownloader类:
private static OkHttpClient defaultOkHttpClient() {
OkHttpClient client = new OkHttpClient();
client.setConnectTimeout(Utils.DEFAULT_CONNECT_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
client.setReadTimeout(Utils.DEFAULT_READ_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
client.setWriteTimeout(Utils.DEFAULT_WRITE_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
return client;
}
private static OkHttpClientdefaultOkHttpClient() {
OkHttpClientclient = new OkHttpClient();
client.setConnectTimeout(Utils.DEFAULT_CONNECT_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
client.setReadTimeout(Utils.DEFAULT_READ_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
client.setWriteTimeout(Utils.DEFAULT_WRITE_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
return client;
}
Retrofit也有类似的工厂方法来创建自己的OkHttpClient。
图片一般在应用程序中需要加载的比较大的资源。尽管Picasso自己维护它的LRU机制来缓存图片,在内存中严格执行。如果客户端尝试使用Picasso来加载图片。Picasso会找不到其在内存中缓存图像,然后将委托加载该图片到它的内部OkHttpClient实例。并且默认情况下该实例将始终从服务器加载图片资源。
作为defaultOkHttpClient的方法不能与上面提到的文件系统中的响应缓存配置结合起来。
指定你自己的OkHttpClient实例允许返回数据从文件系统缓存响应,图片不会从服务器加载。这是非常重要的在程序第一次启动以后。这个时候Picasso的内存缓存是冷的。所以它会频繁的委托OkHttpClient实例去加载图片。
这就需要构建配置了您Picasso 的OkHttpClient实例,如果你在你的代码中使用
Picasso.with(context).load(...)
Picasso.with(context).load(...)
加载图片,你是用的是Picasso的单例模式。这是通过with方法懒汉模式地实例化并配置自己的OkHttpClient。因此,我们必须使我们自己的Picasso实例在单例之前通过wiht方法调用。
实现这个,可以简单的将OkHttpClient实例封装在OkHttpDownloader中,然后传递给 Picasso.Builder 实例的downloader方法。
final Picasso picasso = new Picasso.Builder(context)
.downloader(new OkHttpDownloader(okHttpClient))
.build();
// The client should inject this instance whenever it is needed, but replace the singleton
// instance just in case.
Picasso.setSingletonInstance(picasso);
final Picassopicasso = new Picasso.Builder(context)
.downloader(new OkHttpDownloader(okHttpClient))
.build();
// The client should inject this instance whenever it is needed, but replace the singleton
// instance just in case.
Picasso.setSingletonInstance(picasso);
在Retrofit中要使用OkHttpClient实例,需要改造1.9.x的一个RestAdapter,需要将OkHttpClient封装OkClient的实例中。然后把它传递给RestAdapter.Builder实例的setClient方法。
restAdapterBuilder.setClient(new OkClient(httpClient));
restAdapterBuilder.setClient(new OkClient(httpClient));
在 Retrofit 2.0中只需要简单的将OkHttpClient传递给Retrofit.Builder实例的client方法。
在可汗学院的APP中我们通过 Dagger 依赖注入来确保我们只有一个OkHttpClient的实例。这种方法同样也适用于Picasso和Retrofit我们提供了一个为OkHttpClient实例提供单例模式的注解示例:
@Provides
@Singleton
public OkHttpClient okHttpClient(final Context context, ...) {
final OkHttpClient okHttpClient = new OkHttpClient();
configureClient(okHttpClient, ...);
return okHttpClient;
}
@Provides
@Singleton
public OkHttpClientokHttpClient(final Contextcontext, ...) {
final OkHttpClientokHttpClient = new OkHttpClient();
configureClient(okHttpClient, ...);
return okHttpClient;
}
OkHttpClient将会通过Dagger的注解创建一个实例提供给我们的Picasso和Retrofit。
4.指定一个用户代理拦截器
日志文件和分析为我们提供了更多有用的信息,当客户在每个请求提供详细的User-Agent
header值的时候。默认情况下,Okhttp包含User-Agent值只有在特定的Okhttp版本中。为了指定我们自己的user
agent。首先创建拦截器的替换值, 我们可以看stackoverflow的建议 。
public final class UserAgentInterceptor implements Interceptor {
private static final String USER_AGENT_HEADER_NAME = "User-Agent";
private final String userAgentHeaderValue;
public UserAgentInterceptor(String userAgentHeaderValue) {
this.userAgentHeaderValue = Preconditions.checkNotNull(userAgentHeaderValue);
}
@Override
public Response intercept(Chain chain) throws IOException {
final Request originalRequest = chain.request();
final Request requestWithUserAgent = originalRequest.newBuilder()
.removeHeader(USER_AGENT_HEADER_NAME)
.addHeader(USER_AGENT_HEADER_NAME, userAgentHeaderValue)
.build();
return chain.proceed(requestWithUserAgent);
}
}
public final class UserAgentInterceptor implements Interceptor {
private static final String USER_AGENT_HEADER_NAME = "User-Agent";
private final String userAgentHeaderValue;
public UserAgentInterceptor(String userAgentHeaderValue) {
this.userAgentHeaderValue = Preconditions.checkNotNull(userAgentHeaderValue);
}
@Override
public Responseintercept(Chainchain) throws IOException {
final RequestoriginalRequest = chain.request();
final RequestrequestWithUserAgent = originalRequest.newBuilder()
.removeHeader(USER_AGENT_HEADER_NAME)
.addHeader(USER_AGENT_HEADER_NAME, userAgentHeaderValue)
.build();
return chain.proceed(requestWithUserAgent);
}
}
为了创建User-Agent header值人然后传递给UserAgentInterceptor的构造器,使用你得到的任何信息。
我们可以使用:
android 的系统信息可以清晰的传递出这是一台android 设备
Build.MODEL 或者“制造商提供的用户可见最终可见的名称”
Build.BRAND或者“消费者可见的品牌与产品/硬件相关信息”
Build.VERSION.SDK_INT或者“消费者可见的Android提供的SDK版本号”
BuildConfig.APPLICATION_ID
BuildConfig.VERSION_NAME
BuildConfig.VERSION_CODE
最后三个值由的applicationID,VERSIONCODE和VERSIONNAME的值在我们的Gradle build脚本中
了解更多信息可以查看 versioning your applications 和 configuring your applicationId with Gradle
请注意,如果您的应用程序使用的是WebView,您可以配置使用相同的 User-Agent header值,你可以通过下面方法创建UserAgentInterceptor:
WebSettings settings = webView.getSettings();
settings.setUserAgentString(userAgentHeaderValue);
WebSettingssettings = webView.getSettings();
settings.setUserAgentString(userAgentHeaderValue);
5.指定合理的超时
2.5.0版本之前,OkHttp请求默认为永不超时。2.5.0版本开始如果建立连接请求超时,如果从连接读取下一个字节或写入的下一个字节到连接,花费超过10秒,就终止。这样做需要更新到2.5.0版本我们就不需要在我们的代码中修改bug。原因很简单是我因为我们第一次使用的时候使用了错误的路径。
要覆盖这些默认值,可以分别调用setConnectTimeout,setReadTimeout或setWriteTimeout。
需要注意的是Picasso和Retrofit为OkHttpClient实例指定不同的超时值时,默认情况下,Picasso指定:
连接超过15秒.
读取超过20秒
写入超过20秒
而Retrofit指定:
连接超过15秒.
读取超过20秒
没有写入超时
通过配置Picasso和Retrofit自己的OkHttpClient实例你可以确保所有的请求超时是一致的
海尔热水器ES40H-C3(E)使用说明,怎么用?
说明书上有具体的操作方法、步骤,而且还有产品的参数及使用注意事项,用之前一定要好好的读两遍说明书的。
求一个八重洲FTH7005的说明书 使用说明书 怎么调发射功率 发射电流才0.7...
换个元器件吧 1.安装写频软件 2.电脑连接对讲机 3.打开写频软件 4.读取频率 5.修改频率及亚音 6.写入对讲机的频率 7.OK
R7-3750H的处理器的电脑使用CAD和solid works行不行?
1.可以的,日常的CAD是OK的,这个CPU性能不错,用起来没问题,你用CAD这类三维软件的话,显卡最好是好一些的,至少是GTX1650 4G的。2.如果不是为了方便携带而选的笔记本,我建议你配置一台台式机,性能要好很多。
帮忙指教一下DOS的使用?
echo 用法格式:ok.bat ip FOR \/F %%i IN (D:\\user.dic) DO smb.exe %1 %%i D:\\pass.dic 200 存为:ok.exe 说明:输入一个IP后,用字典文件d:\\pass.dic来暴解d:\\user.dic中的用户密码,直到文件中值取完为止。%%i为用户名;%1为输入的IP地址(默认)。 #7 七: 2:if命令及变量 基本格式: IF [...
河北网通赠送的中兴ZXV10 H108B家庭网关,如何破解并使用其路由功能?
OK!接上H108B电话线,过10秒钟左右找到”状态”->“网络侧信息”,看是否有获得IP地址、掩码、DNS等信息,如果有,设置成功!行了,访问一下任意网页,是不是不用拨号了,呵呵,那是H108B已经帮你拨了。参考资料:http:\/\/www.kdbd.net\/archiver\/?tid-29.html ...
新买的西马格BC1009怎么用啊?
→短暂按“SET”画面闪烁。→用“RESET\/MODE2”选择MPH或KMH,→按“SET”确认,SET OK将显示在荧幕。KMH=公里,24h\/MPH=英里,12h 3.计算轮子尺寸 →使用TableC,WHEEL SIZE CHART来决定您轮子的尺寸。→二种选择方式:输入数值或计算\/决定轮子尺寸(Tab.A或Tab.B)。4.设定轮子尺寸 →按“MODE...
笔记本,gatewayid57h如何使用F按键 F1-F12都不能正常使用。如何正常使用...
FN建 再加F1-12就OK了 这个品牌的键盘F1-12和FN功能组合键与其他的品牌是反的。
怎样将已有的数据库表应用到eclipseh中
在弹出的新窗口中,打开文件夹“Data Management”找到“Data Source Explorer”,并单击“OK”。4 这时候,Eclipse主界面下方会多出一个“Data Source Explorer”标签栏,在其中“Database Connections”文件夹图标上单击右键,选中“New...”。5 出现新窗口,找到自己正在使用的数据库"Oracle",自行起个...
...连接电脑后不能往电脑上复制东西,一点粘贴就显示说什么H盘使用...
不用Pc套件,直接选数据传送,插入数据线前关闭所有运行的软件,包括后台运行的A4、来电通、网秦、主题、桌面、图片之类的软件,也就是和出厂设置一样的状态。之所以不能传送是因为还有软件在运行,新版机就不用那么麻烦,在你插数据线的同时系统已经自动屏蔽了所有运行的软件,可以直接传输数据。
化学方程式配平怎么用化学式的化合价的变
注意,使用这个方法不必要一定从左边配到右边,或者从右边配到左边,只要配的方便就好。下面举例讲 (1+x)P+3CuSO4+4xH2O=1Cu3P+xH3PO4+3H2SO4(以这个方程式为例讲解)先观察两边,发现出现少的是Cu和S,先配Cu,先在Cu3P前配个1,这样CuSO4和H2SO4前就都配个3,接下来没法确定其他的,只...
乐正博复方: kHttp 可以做很多事,包括上传字符串、上传文件、上传流、上传表格参数、上传多部分的32313133353236313431303231363533e59b9ee7ad9431333361326334请求、响应 Json、响应缓存等.目前主要流行 Json 数据通信,所以我们就来讲...
铜川市13726485073: java okhttp3 的使用方法 - ?
乐正博复方: 代码如下: import java.io.IOException; import java.net.SocketTimeoutException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;import okhttp3.Cookie; import okhttp3.CookieJar; import okhttp3....
铜川市13726485073: 如何使用okhttp库在Android的参数添加到API - ?
乐正博复方: 参考下面方法 private final OkHttpClient client = new OkHttpClient(); public void run() throws Exception { RequestBody formBody = new FormEncodingBuilder() .add("email", "Jurassic@Park.com") .add("tel", "90301171XX") .build(); ...
铜川市13726485073: okhttp https 怎么用 - ?
乐正博复方: 您好! HTTPS是一种应用了SSL证书的加密访问协议,可以加密网站传输数据,比如百度,淘宝都是在用HTTPS加密协议,以后互联网都会变成HTTPS加密协议,国外互联网八成都是http加密协议,网站实现HTTPS加密协议需要SSL证书,SSL证书需要到CA机构比如沃通CA机构申请.SSL证书需要付费购买,沃通CA也提供免费的SSL证书,不过免费的SSL知识初级的SSL,高级的SSL证书需要付费购买. SSL证书需要安装在网站的服务器上,目前有一款SSL精灵工具可以实现一键部署SSL证书,很方便的.
铜川市13726485073: okhttp怎么进行socket长连接通信 - ?
乐正博复方: OKHttp是一款高效的HTTP客户端,支持连接同一地址的链接共享同一个socket,通过连接如果一个线程正在写请求或者读响应,将会引发IOException,同时可以
铜川市13726485073: okhttp3怎么设置代理 - ?
乐正博复方: okhttp3 复用okhttpclient配置 所有HTTP请求的代理设置,超时,缓存设置等都需要在OkHttpClient中设置.如果需要更改一个请求的配置,可以使用OkHttpClient.newBuilder()获取一个builder对象,该builder对象与原来OkHttpClient共享相同的...
铜川市13726485073: okhttp使用中自己要处理哪些错误和异常 - ?
乐正博复方: OkHttp是一个相对成熟的解决方案,据说Android4.4的源码中可以看到HttpURLConnection已经替换成OkHttp实现了.所以我们更有理由相信OkHttp的强大.OkHttp 处理了很多网络疑难杂症:会从很多常用的连接问题中自动恢复.如果您的服务...
铜川市13726485073: Android Studio怎么加载okHttp - ?
乐正博复方: 1、点击File-->Project Structure,如图:2、点击左侧栏的“app”,然后点击顶部导航的“Dependencies”,最后点击“加号”,点击“加号”后,会出现三个选项,选择第一个(添加第三方库),如图:
铜川市13726485073: 安卓开发okhttp可以直接添加依赖就能使用吗 - ?
乐正博复方: 安卓开发okhttp可以直接添加依赖就能使用,就是jar包导入项目就可以了,然后去看okhttp的调用文档调用方法就行了、非常简单.
铜川市13726485073: Okhttp怎样使用post向服务器提交数组 - ?
乐正博复方: public String androidPost() { String rs = null; String path = "url/Android_JDBC_SH/AndroidLoginAction"; HttpPost hp = new HttpPost(path); //获取客户端,用来向服务器发出请求 DefaultHttpClient hc = new DefaultHttpClient(); try { //Default ...