okhttp-utils

来源:互联网 发布:windows阻止此软件 编辑:程序博客网 时间:2024/06/06 08:41

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.csdn.net/";    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方法,直接复写即可。

0 0
原创粉丝点击