Okhttp的使用

实际开发中肯定离不开网络请求数据,这时候我们可以用系统原生的,但我们更多时候用的是第三方的框架,例如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();
                    }
                });
            }
        });
    }
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值