Android OkHttp 网络请求 使用详解

本文介绍如何使用OkHttp实现GET请求,并提供了一个简单的Android应用示例。文章详细讲解了依赖添加、工具类创建及调用过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于 Android 开发来说,网络请求是必不可少的一件事情,但想要自己开发一个合适又好用的网络请求框架,对于一般人来说这是一件很难实现的事。毕竟在网络请求的过程中有很多因素需要你考虑到。而且目前 Git  上提供了许多好用又方便的第三方框架让你可以更快更简单的实现网络请求的功能。OkHttp 是目前市场上主流的网络请求第三方框架,它可以让你很轻易的实现许多你想要的网络请求,如:配置网络请求缓存区,处理各种请求结果 等等。。。

OkHttp 使用起来也非常简单快速,首先添加它的依赖:

compile 'com.squareup.okhttp3:okhttp:3.2.0'
compile 'com.squareup.okio:okio:1.7.0'

创建一个 OkHttpUtils 网络请求工具类:(这里只是提供了 GET 方法的实现)

import java.io.File;
import java.util.concurrent.TimeUnit;

import okhttp3.Cache;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;

/**
 * Created by ZY on 2017/6/1.
 */

public class OkHttpUtil {

    public OkHttpUtil(){
    }
    /**
     * 通过get来获取网络数据
     * @param file 缓存区文件
     * @param url 链接地址
     * @param callback 请求后的回调
     */
    public static void getOkHttp(File file, String url, Callback callback){

        int cacheSize=10*1024*1024;//设置缓存区大小

        OkHttpClient.Builder clientBuilder=new OkHttpClient.Builder()
                .connectTimeout(5, TimeUnit.SECONDS)//连接超时时间设置
                .readTimeout(5,TimeUnit.SECONDS)//设置读取超时时间
                .writeTimeout(5,TimeUnit.SECONDS)//设置写入超时时间
                .cache(new Cache(file.getAbsoluteFile(),cacheSize));//设置缓存大小

        OkHttpClient okHttpClient=clientBuilder.build();//通过builder来创建客户端实例

        Request.Builder builder=new Request.Builder()//初始化Request的Builder实例
                .url(url);//设置url

        builder.method("GET",null);//设置请求方法为 GET(默认为 GET)

        Request request=builder.build();//通过builder得到Request实例

        Call call=okHttpClient.newCall(request);//通过客户端得到call实例

        call.enqueue(callback);//发起网络请求并且通过callback来操作返回的结果
    }
}
最后在需要使用的地方直接使用工具类进行网络请求就好了:(OkHttp 内部实现了在子线程中请求,所以不需要开子线程)

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.Button;

import java.io.File;
import java.io.IOException;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;

public class MainActivity extends AppCompatActivity {
    @BindView(R.id.main_get_image_btn)
    Button mainGetImageBtn;
    
    private String url;//声明地址url

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
    }

    @OnClick(R.id.main_get_image_btn)
    public void onClick() {

        url = "https://www.baidu.com";//url百度地址

        File cache = getExternalCacheDir();//缓存文件

        OkHttpUtil.getOkHttp(cache, url, new Callback() {//请求回调
            @Override
            public void onFailure(Call call, IOException e) {//请求失败
                Log.d("rongjie", "onFailure: " + e.getMessage());
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {//请求成功
                Log.d("rongjie", "onResponse: " + response.networkResponse());
            }
        });
    }
}

这样一个简单的通过 OkHttp 的GET 请求就实现了 。

ps:别忘了网络权限的开启



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值