Android Studio访问Http资源之Okhttp
OkHttp-支持SPDY协议的高效HTTP库
-
- 1.了解Okhttp
- 2.程序
- 3.更多
okhttp官网 点此进入
1.了解Okhttp
虽然HttpURLConnection以及HttpClient都支持HTTPS协议并且能够处理流式的上传与下载配置超时问题、IPv6地址族以及连接池等设置均可满足我们的各种HTTP请求需求然而更高效的利用HTTP协议能够让我们的应用运行得更快同时流量消耗也更低而OkHttp库正是专为提升HTTP协议效率而设计的工具包
OkHttp是一个高效的HTTP库:
支持SPDY,共享同一个Socket来处理同一个服务器的所有请求
如果SPDY不可用,则通过连接池来减少请求延时
无缝的支持GZIP来减少数据流量
缓存响应数据来减少重复的网络请求
自动地从各种常见的连接问题中恢复。当服务器设置有多个IP地址时,在第一个IP无法建立连接时,OkHttp将依次尝试后续的IP地址。
OkHttp还处理 了代理服务器问题和SSL握手失败问题。
无需修改程序中的网络代码即可使用OkHttp。该HTTP客户端库(如OkHttp)在功能上与另一个类似库(如Java的HttpClient)极为相近。那么当采用HttpClient时(如Java),您将获得一个相应的okhttp-apache组件。
OkHttp是一个较为完善的解决方案,并且在Android 4.4的源码中可见将HttpURLConnection替换为OkHttp实现了这一操作。基于以上分析和实践经验的支持 ,我们有充分的理由相信OkHttp的强大。
2.程序
此程序是通过get方式与post方式访问一个接口来获取接口的信息。
该接口路径 http://tcc.taobao.com(cc/json/mobile_tel_segment.htm?tel=手机号)
1.在build.gradle文件中加入依赖
implementation 'com.squareup.okhttp3:okhttp:4.4.0'
2.AndroidManifest.xml添加网络权限
<uses-permission android:name="android.permission.INTERNET"/>
3.在AndroidMainfest.xml的application标签内添加
android:usesCleartextTraffic="true"
4.MainActivity.java代码,xml就不放了,两个button
public class MainActivity extends AppCompatActivity {
private Button btn1;
private Button btn2;
private String urlAddressFront = "http://tcc.taobao.com";
private String urlAddressMethod = "/cc/json/mobile_tel_segment.htm";
private OkHttpClient okHttpClient;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn1 = (Button) findViewById(R.id.btn_get);
btn2 = (Button) findViewById(R.id.btn_post);
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
doGet("19999999999");
}
});
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
doPost("18888888888");
}
});
okHttpClient = new OkHttpClient(); //okHttpClient的初始化
}
//doPost,通过构造请求参数
private void doPost(final String s) {
new Thread(new Runnable() {
@Override
public void run() {
FormBody formBody = new FormBody.Builder().add("tel",s).build(); //参数是键值对,如("username","张三")
Request request = new Request.Builder().url(urlAddressFront + urlAddressMethod).post(formBody).build(); //完整请求
//准备发送请求 这里使用异步请求
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(@NotNull Call call, @NotNull IOException e) {
Log.d("TAGPOST","failed");
}
@Override
public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
Log.d("TAGPOST",response.body().string());
}
});
}
}).start();
}
//doGet,通过拼接url
private void doGet(String s) {
final String urlAddress = urlAddressFront + urlAddressMethod + "?tel=" + s; //拼接出完整的url
new Thread(new Runnable() {
@Override
public void run() {
//先生成一个Request请求
Request request = new Request.Builder().url(urlAddress).build();
//准备发送请求 okhttp请求有两种:同步请求和异步请求,这里使用同步请求
try {
Response response = okHttpClient.newCall(request).execute(); //发送请求并返回response,存到response中
if(response.isSuccessful()){
Log.d("TAGGET",response.body().string());
}else {
Log.d("TAGGET","failed");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
}
3.更多
关于Okhttp,更详细请见大佬博客
