okhttputils 使用记录

声明:本文纯粹是记录自己使用的过程,并没有深入的理解以及透彻的分析,本文使用的是鸿洋大神封装的okhttputils ,主要用到了post,get以及File文件下载。

鸿洋大神blog:https://blog.csdn.net/lmj623565791/article/details/47911083

具体使用:

1.初始化okhttpUils以及参数配置

 //cook配置(含session)
        CookieJarImpl cookieJar = new CookieJarImpl(new PersistentCookieStore(getApplicationContext()));
        //http
        HttpsUtils.SSLParams sslParams = HttpsUtils.getSslSocketFactory(null, null, null);
        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .addInterceptor(new LoggerInterceptor("TAG"))
                .connectTimeout(30000, TimeUnit.MILLISECONDS)
                .readTimeout(30000, TimeUnit.MILLISECONDS)
                .cookieJar(cookieJar)
                .sslSocketFactory(sslParams.sSLSocketFactory, sslParams.trustManager)
                //其他配置
                .build();

        OkHttpUtils.initClient(okHttpClient);

通常放在application中。

2.post的具体使用

 @Override
    public void sendMsg(final String json, String flag ,final SendMsgListener sendMsgListener) {
        String url = Constant.baseUrl + "AppWebService.do?appGetSms";
        OkHttpUtils
                .post()
                .url(url)
                .addParams("json",json)
                .addParams("flag",flag)
                .build()
                .execute(new ResponseCallback() {
                    @Override
                    public void onError(Call call, Exception e, int id) {
                        LOG.d("url---------->", e.getMessage());
                        sendMsgListener.sendMsgFail(MyApplication.getInstance().getApplicationContext().getString(R.string.http_request_fail_hint),json);
                    }

                    @Override
                    public void onResponse(ResponseEntity response, int id) {
                        if(response.isSuccess()){
                            sendMsgListener.sendMsgSuccess(json);
                        }else{
                            sendMsgListener.sendMsgFail(response.getMsg(),json);
                        }

                    }
                });
    }

ResponseCallback.java

public abstract class ResponseCallback extends Callback<ResponseEntity>
{
    @Override
    public ResponseEntity parseNetworkResponse(Response response, int id) throws IOException
    {
        String string = response.body().string();
        LOG.d("string" , string);
        return new Gson().fromJson(string, ResponseEntity.class);
    }


}

ResponseEntity.java

public class ResponseEntity {


    /**
     * msg : 成功
     * success : true
     */

    private String msg;
    private boolean success;

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public boolean isSuccess() {
        return success;
    }

    public void setSuccess(boolean success) {
        this.success = success;
    }
}

说明:ResponseEntity .java只是一个实体类,具体的回传数据根据接口文档来,ResponseCallback这个类是一个自定义的CallBack,主要实现了接口请求成功的回调方法以及请求失败的回调方法,并且通过gson解析直接将返回的json串直接解析成实体类,另外sendMsg()方法中,OkHttpUtils的使用遵循的是链式结构的模式,参数的添加主要是以键值对的形式拼接,这个callback()的回调方法以及请求都是执行在子线程当中的,如有疑问可以自行查阅源码。

2.get的具体使用,与post如出一辙,不在过多解释,直接上代码

 @Override
    public void sendMsg(final String json, String flag ,final SendMsgListener sendMsgListener) {
        String url = Constant.baseUrl + "AppWebService.do?appGetSms";
        OkHttpUtils
                .get()
                .url(url)
                .addParams("json",json)
                .addParams("flag",flag)
                .build()
                .execute(new ResponseCallback() {
                    @Override
                    public void onError(Call call, Exception e, int id) {
                        LOG.d("url---------->", e.getMessage());
                        sendMsgListener.sendMsgFail(MyApplication.getInstance().getApplicationContext().getString(R.string.http_request_fail_hint),json);
                    }

                    @Override
                    public void onResponse(ResponseEntity response, int id) {
                        if(response.isSuccess()){
                            sendMsgListener.sendMsgSuccess(json);
                        }else{
                            sendMsgListener.sendMsgFail(response.getMsg(),json);
                        }

                    }
                });
    }

看到代码的小伙伴肯定惊呆了,肯定会说这个和post的代码简直一模一样啊,没错,细心的小伙伴肯定会看到唯一不同的地方就是.post()改成了.get(),其他完全相同,所以此处就不必赘述具体使用了。

3.File下载,该处可以运用到软件更新的地方

 private  static void downloadFile(final Context context,final String serverVersionName)
    {
        String downLoadUrl = Constant.baseUrl + "AppWebService.do?downloadLocal";
//      
        OkHttpUtils
                .get()
                .url(downLoadUrl)
                .build()
                .execute(new FileCallBack(Environment.getExternalStorageDirectory().getAbsolutePath(), context.getString(R.string.app_name) + serverVersionName + ".apk")//
                {

                    @Override
                    public void onBefore(Request request, int id)
                    {

                    }

                    @Override
                    public void inProgress(float progress, long total, int id)
                    {
                        LOG.e("AlterPasswordModelImpl","inProgress :" + (int) (100 * progress));
                        DownloadDialog.setProgress((int) (100 * progress));

                    }

                    @Override
                    public void onError(Call call, Exception e, int id)
                    {
                        LOG.e("AlterPasswordModelImpl", "onError :" + e.getMessage());
                        DownloadDialog.closeDialog(mDownloadDialog);
                        ShowToast.showToast("下载失败,请检查网络连接",context);
                    }

                    @Override
                    public void onResponse(File file, int id)
                    {
                        LOG.e("localFile", "onResponse :" + file.getAbsolutePath());
                        saveFilePath(context,file.getAbsolutePath());
                        DownloadDialog.closeDialog(mDownloadDialog);
                        install(context,file);
                    }
                });
    }

说明一下:其实上述的请求方式还是一个get请求,只不过请求的callback是一个FileCallBack罢了,这个callBack需要实现几个特殊的方法,inProgress(),这个方法的意思就是下载中的方法,主要用于显示下载的进度条等操作,onError(),下载失败的方法,onResponse()下载成功的方法,在这可以根据需求处理一定的逻辑。

如果想看软件升级的相关内容,我的另一篇文章有讲到:https://blog.csdn.net/Silence_Sep/article/details/80451342

另外okhttputils的使用在下面的源码中有用到:https://download.csdn.net/download/silence_sep/10562709

最后这篇文章也对okhttpsutils其他用法做了简单的介绍:
https://www.jianshu.com/p/721381cf974f

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
okhttputils是一个基于OkHttp封装的Android网络请求库,它提供了一些常用的网络请求功能,如GET、POST、文件上传、文件下载等。使用okhttputils可以简化Android网络请求的开发,提高开发效率。下面是okhttputils的一些特点和使用方法: 1.特点: - 支持GET、POST、PUT、DELETE等请求方式。 - 支持文件上传、文件下载等功能。 - 支持自定义请求头、请求参数等。 - 支持请求回调、响应拦截器等。 - 支持链式调用,代码简洁易读。 2.使用方法: - 添加依赖:在项目的build.gradle文件中添加以下依赖: ``` dependencies { implementation 'com.zhy:okhttputils:2.6.2' implementation 'com.squareup.okhttp3:okhttp:3.12.1' } ``` - 发送GET请求:使用以下代码发送GET请求: ``` OkHttpUtils.get(url) .tag(this) .params(params) .execute(new StringCallback() { @Override public void onSuccess(Response<String> response) { // 请求成功回调 } @Override public void onError(Response<String> response) { // 请求失败回调 } }); ``` - 发送POST请求:使用以下代码发送POST请求: ``` OkHttpUtils.post(url) .tag(this) .params(params) .execute(new StringCallback() { @Override public void onSuccess(Response<String> response) { // 请求成功回调 } @Override public void onError(Response<String> response) { // 请求失败回调 } }); ``` - 文件上传:使用以下代码上传文件: ``` OkHttpUtils.post(url) .tag(this) .params(params) .addFile("file", "file.png", file) .execute(new StringCallback() { @Override public void onSuccess(Response<String> response) { // 请求成功回调 } @Override public void onError(Response<String> response) { // 请求失败回调 } }); ``` - 文件下载:使用以下代码下载文件: ``` OkHttpUtils.get(url) .tag(this) .execute(new FileCallback() { @Override public void onSuccess(Response<File> response) { // 下载成功回调 } @Override public void onError(Response<File> response) { // 下载失败回调 } }); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值