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

没有更多推荐了,返回首页