Okhttp的使用

来源:互联网 发布:魔豆软件 编辑:程序博客网 时间:2024/05/22 03:47

实际开发中肯定离不开网络请求数据,这时候我们可以用系统原生的,但我们更多时候用的是第三方的框架,例如Volley、Retrofit、Android-async-http,xutils,等等,当然不可能少了我们的主角Okhttp,现在我们先分析一下它们各自的特点。

1.Volley

Volley是一个简单的异步http库,仅此而已,是google推出的异步网络请求框架和图片加载框架。特别适合数据量小,通信频繁的网络操作。android绝大多数都属于这种类型,缺点是不支持同步,这点会限制开发者模式,所以不适用来上传大文件,不能post大数据。

2.Android-async-http

与Volley一样是异步网络库,使用了nio的方式实现,不过nio更适合大量链接的情况,对于移动平台有点杀鸡用牛刀的味道,volley是封装的httpURLCommit,android-async-http是封装的httpClient
,而Android平台不推荐使用HttpClientl,所以,这个库已经不适合Android平台了。

3.OkHttp

okthhp是高性能的http库,支持同步,异步,而且实现了spdy,http2,websocket协议,api很简洁易用,和Volley一样实现了http协议的缓存,Picasso就是利用okhttp的缓存机制实现其文件的缓存,实现的很优雅,很正确,okhttp和async http是一个基础的通信库,都很强大,但需要自己封装使用才更加方便,另外,okhttp已经被谷歌官方用在Android源码中了。
进入主题。使用okhttp
先添加最新的

compile 'com.squareup.okhttp3:okhttp:3.4.2'

也不要忘了添加网络权限

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

接下来上效果图
这里写图片描述

直接放上代码,代码里注解写的很详细

package com.gsontexe;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.widget.Toast;import java.io.IOException;import okhttp3.Call;import okhttp3.Callback;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.Response;public class MainActivity extends AppCompatActivity{    @Override    protected void onCreate (Bundle savedInstanceState){        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //1.声明一个OkHttpClient        OkHttpClient okHttpClient = new OkHttpClient();         //注:这是自己抓的一个新闻接口        String url = "http://dhapi.dahebao.cn/wemedia/getHot?userId=-1&mType=3&size=25&page=%25d&v=4.1.2&ty=a&appid=1234567890&dt=Ao583Owx-us-5xwCt4GHjfHlwldURZaok1bVnZSFAqDk&tn=-1";        //2.创建一个请求,默认情况下都是get请求 主要request是okhttp的包        Request request = new Request.Builder().url(url).build();        //3.将请求添加到OkHttpClient中,注意 Call也是okhttp的包        Call call = okHttpClient.newCall(request);        //4.发起一个异步请求,Callback是回调函数        call.enqueue(new Callback(){            @Override            //请求失败时回调,该方法在子线程中执行            public void onFailure (Call call, IOException e){            }            //请求成功时回调,该方法在子线程中执行            @Override            public void onResponse (Call call, final Response response) throws IOException{                //data就是我们拿到的数据,转换为了String类型                final String data = response.body().string();                //Toast也算更新ui,子线程不能更新ui,所有开启一个线程来更新                runOnUiThread(new Runnable(){                    @Override                    public void run (){                        Toast.makeText(MainActivity.this, data, Toast.LENGTH_SHORT).show();                    }                });            }        });    }}

因为没有封装,所以写起来比较麻烦,封装就留着你们封装了。
接下来就到了我们的段子时间。昨天,室友丑康回来和我说他在办公室如何的机智。丑康惹怒了一个女同事,女同事骂了他一句滚蛋,丑康和别人说,海呀,我就两个蛋,滚丢了你赔呀?整个办公室都笑喷了。
这里写图片描述

0 0
原创粉丝点击