okhttp-utils


title: 2017-3-27 okhttp-utils
tags: okhttp,As,Eclipse


目前对以下需求进行了封装

* 一般的get请求
* 一般的post请求
* 基于Http Post的文件上传(类似表单)
* 文件下载/加载图片
* 上传下载的进度回调
* 支持取消某个请求
* 支持自定义Callback
* 支持HEAD、DELETE、PATCH、PUT
* 支持session的保持

* 支持自签名网站https的访问,提供方法设置下证书就行

用法

Android Studio

   compile 'com.zhy:okhttputils:2.6.2'

Eclipse
下载最新jar:okhttputils-2_6_2.jar
注:需要同时导入okhttp和okio的jar,下载见:https://github.com/square/okhttp.


Get请求

    String url = "http://www.youkuaiyun.com/";
    OkHttpUtils
        .get()
        .url(url)
        .addParams("username", "hyman")
        .addParams("password", "123")
        .build()
        .execute(new StringCallback()
                {
                    @Override
                    public void onError(Request request, Exception e)
                    {

                    }

                    @Override
                    public void onResponse(String response)
                    {

                    }
                });

Post请求

     OkHttpUtils
        .post()
        .url(url)
        .addParams("username", "hyman")
        .addParams("password", "123")
        .build()
        .execute(callback);

Post JSON

     OkHttpUtils
          .postString()
          .url(url)
          .content(new Gson().toJson(new User("zhy", "123")))
          .mediaType(MediaType.parse("application/json; charset=utf-8"))
          .build()
          .execute(new MyStringCallback());

自定义CallBack

 目前内部包含StringCallBack,FileCallBack,BitmapCallback,可以根据自己的需求去自定义Callback,例如希望回调User对象:
    public abstract class UserCallback extends Callback<User>
{
    @Override
    public User parseNetworkResponse(Response response) throws IOException
    {
        String string = response.body().string();
        User user = new Gson().fromJson(string, User.class);
        return user;
    }
}

 OkHttpUtils
    .get()
    .url(url)
    .addParams("username", "hyman")
    .addParams("password", "123")
    .build()
    .execute(new UserCallback()
    {
        @Override
        public void onError(Request request, Exception e)
        {
            mTv.setText("onError:" + e.getMessage());
        }

        @Override
        public void onResponse(User response)
        {
            mTv.setText("onResponse:" + response.username);
        }
    });

通过parseNetworkResponse回调的response进行解析,该方法运行在子线程,所以可以进行任何耗时操作,详细参见sample。

下载文件

OkHttpUtils
    .get()
    .url(url)
    .build()
    .execute(new FileCallBack(Environment.getExternalStorageDirectory().getAbsolutePath(), "gson-2.2.1.jar")
    {
        @Override
        public void inProgress(float progress)
        {
            mProgressBar.setProgress((int) (100 * progress));
        }

        @Override
        public void onError(Request request, Exception e)
        {
            Log.e(TAG, "onError :" + e.getMessage());
        }

        @Override
        public void onResponse(File file)
        {
            Log.e(TAG, "onResponse :" + file.getAbsolutePath());
        }
    });

注:下载文件可以使用FileCallback,需要传入文件需要保存的文件夹以及文件名。

显示图片

     OkHttpUtils
        .get()
        .url(url)
        .build()
        .execute(new BitmapCallback()
        {
            @Override
            public void onError(Request request, Exception e)
            {
                mTv.setText("onError:" + e.getMessage());
            }

            @Override
            public void onResponse(Bitmap bitmap)
            {
                mImageView.setImageBitmap(bitmap);
            }
        });

上传下载的进度显示

new Callback<T>()
{
    //...
    @Override
    public void inProgress(float progress)
    {
       //use progress: 0 ~ 1
    }
}

callback回调中有inProgress方法,直接复写即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值