Advertisement

Android Studio访问Http资源之Okhttp

阅读量:

OkHttp-支持SPDY协议的高效HTTP库

    • 1.了解Okhttp
    • 2.程序
    • 3.更多

okhttp官网 点此进入

项目源码 https://gitee.com/ssszs/OkHttpDemo.git

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,更详细请见大佬博客

Android平台下的OkHttp完全解析:全面解析Android平台下的OkHttp库

全部评论 (0)

还没有任何评论哟~