OkGo的详解

Android OkGo网络框架解析,Android面试知识点总结宝典助你通关 以前一直是自己在网上东平西凑的找,找到的东西也是零零散散,很多时候都是看着看着就没了,时间浪费了,问题却还没得到解决,很让人抓狂。后面我就自己整理了一套资料,还别说,真香!资料有条理,有系统,还很全面,我不方便直接放出来,大家可以先看看有没有用得到的地方吧。就自己整理了一套资料,还别说,真香!资料有条理,有系统,还很全面,我不方便直接放出来,大家可以先看看有没有用得到的地方吧。[外链图片转存中…(img-roEzjIUj-1711908909319)] 阅读详情

一 okgo的简介

该库是封装了okhttp的标准RESTful风格的网络框架,可以与RxJava完美结合,比Retrofit更简单易用。支持大文件上传下载,上传进度回调,下载进度回调,表单上传(多文件和多参数一起上传),链式调用,可以自定义返回对象,支持Https和自签名证书,支持超时自动重连,支持cookie与session的自动管理,支持四种缓存模式缓存网络数据,支持301、302重定向,扩展了统一的上传管理和下载管理功能。


二 okgo的使用介绍

2.1 build.gradle添加依赖

compile 'com.lzy.net:okgo:3.0.4'

2.2 权限设置

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

2.3 Application中全局配置

一般在Aplication,或者基类中配置,只需要调用一次即可

  • 可以配置log开关
  • 全局的超时时间
  • 全局cookie管理策略
  • Https配置
  • 超时重连次数
  • 公共的请求头和请求参数等信息

注意:不要忘记了在清单文件中注册 Application

  private void initOkGo() {
        //---------这里给出的是示例代码,告诉你可以这么传,实际使用的时候,根据需要传,不需要就不传-------------//
        HttpHeaders headers = new HttpHeaders();
        headers.put("commonHeaderKey1", "commonHeaderValue1");    //header不支持中文,不允许有特殊字符
        headers.put("commonHeaderKey2", "commonHeaderValue2");
        HttpParams params = new HttpParams();
        params.put("commonParamsKey1", "commonParamsValue1");     //param支持中文,直接传,不要自己编码
        params.put("commonParamsKey2", "这里支持中文参数");
        
        addFileWrapperParams("key", List<HttpParams.FileWrapper> fileWrappers)//这里支持一个key传多个文件
    .addCookie("aaa", "bbb")    // 这里可以传递自己想传的Cookie
    .addCookie(cookie)          // 可以自己构建cookie
    .addCookies(cookies)        // 可以一次传递批量的cookie//----------------------------------------------------------------------------------------//

        OkHttpClient.Builder builder = new OkHttpClient.Builder();
        //log相关
        HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor("OkGo");
        loggingInterceptor.setPrintLevel(HttpLoggingInterceptor.Level.BODY);        //log打印级别,决定了log显示的详细程度
        loggingInterceptor.setColorLevel(Level.INFO);                               //log颜色级别,决定了log在控制台显示的颜色
        builder.addInterceptor(loggingInterceptor);                                 //添加OkGo默认debug日志
        //第三方的开源库,使用通知显示当前请求的log,不过在做文件下载的时候,这个库好像有问题,对文件判断不准确
        //builder.addInterceptor(new ChuckInterceptor(this));

        //超时时间设置,默认60秒
        builder.readTimeout(OkGo.DEFAULT_MILLISECONDS, TimeUnit.MILLISECONDS);      //全局的读取超时时间
        builder.writeTimeout(OkGo.DEFAULT_MILLISECONDS, TimeUnit.MILLISECONDS);     //全局的写入超时时间
        builder.connectTimeout(OkGo.DEFAULT_MILLISECONDS, TimeUnit.MILLISECONDS);   //全局的连接超时时间

        //自动管理cookie(或者叫session的保持),以下几种任选其一就行
        //builder.cookieJar(new CookieJarImpl(new SPCookieStore(this)));            //使用sp保持cookie,如果cookie不过期,则一直有效
        builder.cookieJar(new CookieJarImpl(new DBCookieStore(this)));              //使用数据库保持cookie,如果cookie不过期,则一直有效
        //builder.cookieJar(new CookieJarImpl(new MemoryCookieStore()));            //使用内存保持cookie,app退出后,cookie消失

        //https相关设置,以下几种方案根据需要自己设置
        //方法一:信任所有证书,不安全有风险
        HttpsUtils.SSLParams sslParams1 = HttpsUtils.getSslSocketFactory();
        //方法二:自定义信任规则,校验服务端证书
        HttpsUtils.SSLParams sslParams2 = HttpsUtils.getSslSocketFactory(new SafeTrustManager());
        //方法三:使用预埋证书,校验服务端证书(自签名证书)
        //HttpsUtils.SSLParams sslParams3 = HttpsUtils.getSslSocketFactory(getAssets().open("srca.cer"));
        //方法四:使用bks证书和密码管理客户端证书(双向认证),使用预埋证书,校验服务端证书(自签名证书)
        //HttpsUtils.SSLParams sslParams4 = HttpsUtils.getSslSocketFactory(getAssets().open("xxx.bks"), "123456", getAssets().open("yyy.cer"));
        builder.sslSocketFactory(sslParams1.sSLSocketFactory, sslParams1.trustManager);
        //配置https的域名匹配规则,详细看demo的初始化介绍,不需要就不要加入,使用不当会导致https握手失败
        builder.hostnameVerifier(new SafeHostnameVerifier());

        // 其他统一的配置
        // 详细说明看GitHub文档:https://github.com/jeasonlzy/
        OkGo.getInstance().init(this)                           //必须调用初始化
                .setOkHttpClient(builder.build())               //建议设置OkHttpClient,不设置会使用默认的
                .setCacheMode(CacheMode.NO_CACHE)               //全局统一缓存模式,默认不使用缓存,可以不传
                .setCacheTime(CacheEntity.CACHE_NEVER_EXPIRE)   //全局统一缓存时间,默认永不过期,可以不传
                .setRetryCount(3)                               //全局统一超时重连次数,默认为三次,那么最差的情况会请求4次(一次原始请求,三次重连请求),不需要可以设置为0
                .addCommonHeaders(headers)                      //全局公共头
                .addCommonParams(params);                       //全局公共参数
    }

    /**
     * 这里只是我谁便写的认证规则,具体每个业务是否需要验证,以及验证规则是什么,请与服务端或者leader确定
     * 这里只是我谁便写的认证规则,具体每个业务是否需要验证,以及验证规则是什么,请与服务端或者leader确定
     * 这里只是我谁便写的认证规则,具体每个业务是否需要验证,以及验证规则是什么,请与服务端或者leader确定
     * 重要的事情说三遍,以下代码不要直接使用
     */
    private class SafeTrustManager implements X509TrustManager {
        @Override
        public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
        }

        @Override
        public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
            try {
                for (X509Certificate certificate : chain) {
                    certificate.checkValidity(); //检查证书是否过期,签名是否通过等
                }
            } catch (Exception e) {
                throw new CertificateException(e);
            }
        }

        @Override
        public X509Certificate[] getAcceptedIssuers() {
            return new X509Certificate[0];
        }
    }

    /**
     * 这里只是我谁便写的认证规则,具体每个业务是否需要验证,以及验证规则是什么,请与服务端或者leader确定
     * 这里只是我谁便写的认证规则,具体每个业务是否需要验证,以及验证规则是什么,请与服务端或者leader确定
     * 这里只是我谁便写的认证规则,具体每个业务是否需要验证,以及验证规则是什么,请与服务端或者leader确定
     * 重要的事情说三遍,以下代码不要直接使用
     */
    private class SafeHostnameVerifier implements HostnameVerifier {
        @Override
        public boolean verify(String hostname, SSLSession session) {
            //验证主机名是否匹配
            //return hostname.equals("server.jeasonlzy.com");
            return true;
        }
    }

最简单的如果上面的配置OkHttpClient不想写,就用okgo中默认的,一行代码就可以完成。

OkGo.getInstance().init(this);

2.4 get请求

/**
   * get请求获取数据
   * @param url
   */
  private void getByOkGo(String url){
      OkGo.get(url)                            // 请求方式和请求url
              .tag(this)                       // 请求的 tag, 主要用于取消对应的请求
              .cacheKey("cacheKey")            // 设置当前请求的缓存key,建议每个不同功能的请求设置一个,如果不指定cacheKey,默认是用url带参数的全路径名为cacheKey。
              .cacheMode(CacheMode.DEFAULT)    // 缓存模式
              .execute(new StringCallback() {
                  @Override
                  public void onSuccess(String s, Call call, Response response) {
                      mTextView2.setText(s);
                  }
              });
  }

这里简单说一下缓存模式cacheMode
一共有五种CacheMode缓存模式

  • NO_CACHE:不使用缓存,该模式下cacheKey、cacheTime 参数均无效
  • DEFAULT:按照HTTP协议的默认缓存规则,例如有304响应头时缓存。
  • REQUEST_FAILED_READ_CACHE:先请求网络,如果请求网络失败,则读取缓存,如果读取缓存失败,本次请求失败。
  • IF_NONE_CACHE_REQUEST:如果缓存不存在才请求网络,否则使用缓存。
  • FIRST_CACHE_THEN_REQUEST:先使用缓存,不管是否存在,仍然请求网络。

使用缓存的场景比如:下拉刷新(上拉刷新不需要)CacheMode设置为 IF_NONE_CACHE_REQUEST,效果就是当用户网络没有的时候不至于出现白板的现象。

注意点:
缓存的对象bean必须实现Serializable接口,否者会报NotSerializableException。因为缓存的原理是将对象序列化后直接写入数据库中,如果不实现Serializable接口,会导致对象无法序列化,进而无法写入到数据库中,也就达不到缓存的效果。

 //下拉刷新
  @Override
    public void onRefresh() {
        OkGo.<GankResponse<List<GankModel>>>get(url + "1")//
                .cacheKey("TabFragment_" + fragmentTitle)       //由于该fragment会被复用,必须保证key唯一,否则数据会发生覆盖
                .cacheMode(CacheMode.FIRST_CACHE_THEN_REQUEST)  //缓存模式先使用缓存,然后使用网络数据
                .execute(new NewsCallback<GankResponse<List<GankModel>>>() {
                    @Override
                    public void onSuccess(Response<GankResponse<List<GankModel>>> response) {
                        List<GankModel> results = response.body().results;
                        if (results != null) {
                            currentPage = 2;
                            newsAdapter.setNewData(results);
                        }
                    }

                    @Override
                    public void onCacheSuccess(Response<GankResponse<List<GankModel>>> response) {
                        //一般来说,只需呀第一次初始化界面的时候需要使用缓存刷新界面,以后不需要,所以用一个变量标识
                        if (!isInitCache) {
                            //一般来说,缓存回调成功和网络回调成功做的事情是一样的,所以这里直接回调onSuccess
                            onSuccess(response);
                            isInitCache = true;
                        }
                    }

                    @Override
                    public void onError(Response<GankResponse<List<GankModel>>> response) {
                        //网络请求失败的回调,一般会弹个Toast
                        showToast(response.getException().getMessage());
                    }

                    @Override
                    public void onFinish() {
                        //可能需要移除之前添加的布局
                        newsAdapter.removeAllFooterView();
                        //最后调用结束刷新的方法
                        setRefreshing(false);
                    }
                });
    }

上拉加载:

 /** 上拉加载 */
    @Override
    public void onLoadMoreRequested() {
        OkGo.<GankResponse<List<GankModel>>>get(url + currentPage)//
                .cacheMode(CacheMode.NO_CACHE)       //上拉不需要缓存
                .execute(new NewsCallback<GankResponse<List<GankModel>>>() {
                    @Override
                    public void onSuccess(Response<GankResponse<List<GankModel>>> response) {
                        List<GankModel> results = response.body().results;
                        if (results != null && results.size() > 0) {
                            currentPage++;
                            newsAdapter.addData(results);
                        } else {
                            //显示没有更多数据
                            newsAdapter.loadComplete();
                            View noDataView = inflater.inflate(R.layout.item_no_data, (ViewGroup) recyclerView.getParent(), false);
                            newsAdapter.addFooterView(noDataView);
                        }
                    }

                    @Override
                    public void onError(Response<GankResponse<List<GankModel>>> response) {
                        //显示数据加载失败,点击重试
                        newsAdapter.showLoadMoreFailedView();
                        //网络请求失败的回调,一般会弹个Toast
                        showToast(response.getException().getMessage());
                    }
                });
    }

2.5 post请求

/**
   * post请求
   * @param url
   */
  private void postByOkGo(String url){
      OkGo.post(url)
              .tag(this)
              .cacheKey("cachePostKey")
              .cacheMode(CacheMode.DEFAULT)
              .params("method", "album.item.get")
              .params("appKey", "myKey")
              .params("format", "json")
              .params("albumId", "Lqfme5hSolM")
              .params("pageNo", "1")
              .params("pageSize", "2")
                .params("file1", new File("filepath1")) // 可以添加文件上传
                .params("file2", new File("filepath2")) // 支持多文件同时添加上传
                .addUrlParams("key", List<String> values) //这里支持一个key传多个参数
                .addFileParams("key", List<File> files) //这里支持一个key传多个文件
                .addFileWrapperParams("key", List<HttpParams.FileWrapper> fileWrappers)//这里支持一个key传多个文件
                .addCookie("aaa", "bbb")    // 这里可以传递自己想传的Cookie
                .addCookie(cookie)          // 可以自己构建cookie
                .addCookies(cookies)   
              .execute(new StringCallback() {
                  @Override
                  public void onSuccess(String s, Call call, Response response) {
                      mTextView2.setText(s);
                  }

                  @Override
                  public void onError(Call call, Response response, Exception e) {
                      super.onError(call, response, e);
                      mTextView2.setText(e.getMessage());
                  }
              });
  }

2.6 文件下载

FileCallback具有三个重载的构造方法,分别是

  • FileCallback():空参构造
  • FileCallback(String destFileName):可以额外指定文件下载完成后的文件名
  • FileCallback(String destFileDir, String destFileName):可以额外指定文件的下载目录和下载完成后的文件名

注意:

文件目录如果不指定,默认下载的目录为 sdcard/download/,文件名如果不指定,则按照以下规则命名:
1.首先检查用户是否传入了文件名,如果传入,将以用户传入的文件名命名
2.如果没有传入,那么将会检查服务端返回的响应头是否含有Content-Disposition=attachment;filename=FileName.txt该种形式的响应头,如果有,则按照该响应头中指定的文件名命名文件,如FileName.txt
3.如果上述响应头不存在,则检查下载的文件url,例如:http://image.baidu.com/abc.jpg,那么将会自动以abc.jpg命名文件
4.如果url也把文件名解析不出来,那么最终将以"unknownfile_" + System.currentTimeMillis()命名文件

/**
 * 下载文件
 * @param url 下载地址
 * @param destFileDir 保存文件路径
 * @param destFileName 保存文件名
 */
private void downLoad(String url, String destFileDir, String destFileName){
    OkGo.get(url)//
            .tag(this)//
            .execute(new FileCallback(destFileDir, destFileName) {  //文件下载时,可以指定下载的文件目录和文件名
                @Override
                public void onSuccess(File file, Call call, Response response) {
                    // file 即为文件数据,文件保存在指定目录
                }

                @Override
                public void downloadProgress(long currentSize, long totalSize, float progress, long networkSpeed) {
                    //这里回调下载进度(该回调在主线程,可以直接更新ui)
                    //currentSize totalSize以字节byte为单位
                }
            });
}

2.7.上传String类型和json类型的文本

/**
* 文本上传

*/
private void uploadtexts(){
  OkGo.post(url)//
          .tag(this)//
          .upstring("这里是要上传的文本")
        //  .upjson(jsonobject)    上传json数据
        
          .execute(new StringCallback() {
              @Override
              public void onSuccess(String s, Call call, Response response) {
                  //上传成功
                  Toast.makeText(getApplicationContext(), "上传成功", Toast.LENGTH_SHORT).show();
              }

              @Override
              public void upProgress(long currentSize, long totalSize, float progress, long networkSpeed) {
                  //这里回调上传进度(该回调在主线程,可以直接更新ui)
                  mProgressBar.setProgress((int) (100 * progress));
                  mTextView2.setText("已上传" + currentSize/1024/1024 + "MB, 共" + totalSize/1024/1024 + "MB;");
              }
          });
}

2.8 上传文件

/**
* 多文件上传
* @param url
* @param keyName
* @param files 文件集合
*/
private void uploadFiles(String url, String keyName, List<File> files){
  OkGo.post(url)//
          .tag(this)//
          //.isMultipart(true)       // 强制使用 multipart/form-data 表单上传(只是演示,不需要的话不要设置。默认就是false)
          //.params("param1", "paramValue1")        // 这里可以上传参数
          //.params("file1", new File("filepath1"))   // 可以添加文件上传
          //.params("file2", new File("filepath2"))     // 支持多文件同时添加上传
          .addFileParams(keyName, files)    // 这里支持一个key传多个文件
          .execute(new StringCallback() {
              @Override
              public void onSuccess(String s, Call call, Response response) {
                  //上传成功
                  Toast.makeText(getApplicationContext(), "上传成功", Toast.LENGTH_SHORT).show();
              }

              @Override
              public void upProgress(long currentSize, long totalSize, float progress, long networkSpeed) {
                  //这里回调上传进度(该回调在主线程,可以直接更新ui)
                  mProgressBar.setProgress((int) (100 * progress));
                  mTextView2.setText("已上传" + currentSize/1024/1024 + "MB, 共" + totalSize/1024/1024 + "MB;");
              }
          });
}

2.9 请求加载图片

/**
 * 请求网络图片
 * @param url
 */
private void getBitmap(String url) {
    OkGo.get(url)//
            .tag(this)//
            .execute(new BitmapCallback() {
                @Override
                public void onSuccess(Bitmap bitmap, Call call, Response response) {
                    // bitmap 即为返回的图片数据
                    mImageView.setImageBitmap(bitmap);
                }
            });
}

2.10 取消请求

每个请求前都设置了一个参数tag,取消则通过OkGo.cancel(tag)执行。 例如:在Activity中,当Activity销毁取消请求,可以在onDestory里面统一取消;

@Override
protected void onDestroy() {
    super.onDestroy();

    //根据 Tag 取消请求
    OkGo.getInstance().cancelTag(this);

    //取消所有请求
    OkGo.getInstance().cancelAll();
}

参考链接:(Android框架之路——OkGo的使用_等一杯咖啡的博客-优快云博客_okgo的使用)
https://github.com/jeasonlzy/okhttp-OkGo/wiki/OkGo#okgo主要功能

okgo-3.0.4 okhttp插件 在Java开发环境中,Eclipse是一个广泛使用的集成开发环境(IDE),它支持各种项目的创建和管理。在本场景中,我们要讨论的是如何在Eclipse中添加第三方库,特别是针对`okgo.jar`,以及其依赖的`okio.jar`和`okhttp.jar`。这三个库都是OkHttp生态的一部分,它们为Android和Java应用提供了高效、简洁的网络通信解决方案。 让我们了解这些库的作用: 1. **OkHttp**:这是一个高效的HTTP客户端库,由Square公司开发。OkHttp通过缓存响应、重试失败的请求、保持持久连接等机制,显著提高了网络请求的性能。版本3.8.1是其稳定的一个版本,包含了一些优化和改进。 2. **Okio**:这是一个用于处理I/O操作的库,它提供了更高效的数据读写方式,尤其适用于处理流式数据。Okio作为OkHttp的底层依赖,提供了一套强大的缓冲机制,使得数据处理更加灵活和快速。版本1.13.0带来了新的特性和修复。 3. **OkGo**:这是基于OkHttp封装的一个轻量级网络请求库,主要针对Android平台。OkGo简化了OkHttp的 立即下载

相关推荐

OkGo基本使用整理

Android网络加载框架okgo基本使用整理,封装了加载中弹窗,数据加载完毕后会自动消失。-------------

OkGo的封装和基本使用

OkGo是封装了okhttp的网络框架,可以与RxJava完美结合,比Retrofit更简单易用。支持大文件上传下载,上传进度回调,下载进度回调,表单上传(多文件和多参数一起上传),链式调用,可以自定义返回对象,支持Https和自签名证书,支持cookie自动管理,支持四种缓存模式缓存网络数据,支持301、302重定向,扩展了统一的上传管理和下载管理功能。 OkGo网络请求...

lixiong0713的博客 2万+

从晶体管到触发器:为什么芯片设计必须区分同步/异步复位?

本文深入探讨了芯片设计中同步复位与异步复位的物理本质与工程权衡。从晶体管级的CMOS结构出发,剖析了两种复位方式在物理实现、时序可靠性(如建立/保持时间、恢复/移除时间)上的根本差异,并分析了在不同应用场景下的选择策略。文章强调,理解复位信号的底层机制对于确保芯片时序收敛、系统上电确定性及整体鲁棒性至关重要。

time3的博客 221

超简单OkGo基础使用

第一步:添加第三方依赖库 api 'com.lzy.net:okgo:3.0.4' 第二步:权限设置 <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WR

ZHUHUOHUO的博客 1845

Ubuntu 上 1Panel 的安装与高效运维实践

本文详细介绍了在Ubuntu系统上安装和高效运维1Panel面板的完整实践指南。内容涵盖了一键安装、Docker容器可视化部署、计划任务自动化以及网站数据库管理等核心功能,并提供了安全加固、资源监控与数据备份等进阶技巧,旨在帮助用户快速搭建并管理一个强大易用的服务器环境。

weixin_29210759的博客 143

青龙人形机器人硬件平台设计全解析:从构型到控制系统的实战指南

本文全面解析了青龙人形机器人硬件平台的设计与实现,涵盖构型设计、驱动系统、能源方案及控制系统等核心模块。重点介绍了43个自由度的仿生学实践、关节模组的技术突破以及多模态感知融合等创新设计,为开发者提供了从理论到实战的完整指南。

embedding5hiker的博客 890

OkGo详解

一.什么是OkGo OkGo,基于okhhttp的封装类,你会发现他真的比okhttp简单的多,一个专注于让网络请求更简单的框架,与 RxJava 完美结合,比 Retrofit 更简单易用。 二.主要功能 1)基本的 get、post、put、delete、head、options、trace、patch 八种请求; 2)支持 upString,upJson,upBytes,upFile 等 up 类方法上传特定数据; 3)支持一个 key 上传一个文件,也可以一个 key 上传多个文件,也..

xxdw1992的博客 5480

【随机过程】Markov Chain的定义及发展历程与实际应用

本模块书写的初衷:由于在学习张波张景肖等学者所著的《应用随机过程》存在着不甚了解的知识点,经过个人查找资料并整理、分享,希望能够为有同样疑惑的读者贡献绵薄之力,同时如果个人编写内容有错误,恳请读者指正。本文为对《应用随机过程》第42页中Markov Chain基本概念的补充。1.Markov Chain的定义俄国数学家 Andrey Andreyevich Markov 研究并提出一个用数学方法就能解释自然变化的一般规律模型,被命名为马尔科夫链(Markov Chain)。

qq_49657150的博客 3743

android okgo分页,Android热门网络框架OkGo详解

OkGo简介该库是封装了okhttp的网络框架,可以与RxJava完美结合,比retrofit更简单易用。支持大文件上传下载,上传进度回调,下载进度回调,表单上传(多文件和多参数一起上传),链式调用,可以自定义返回对象,支持https和自签名证书,支持cookie自动管理,支持四种缓存模式缓存网络数据,支持301、302重定向,扩展了统一的上传管理和下载管理功能。OkGo的特点OkGo默认配置请求...

weixin_34142444的博客 674

【AI智能体】Docker 部署 Coze应用服务实战操作详解

Docker 部署 Coze应用服务实战操作详解

congge 4869

本地快速部署谷歌开放模型Gemma教程(基于Ollama)

谷歌最近发布了新一代开源AI模型Gemma,此次发布的 Gemma 相比自家的 Gemini 更加轻量级,模型权重也一并开源。不仅可以在笔记本电脑上运行,而且还免费可商用,支持中文。运行速度飞快。

特立独行的博客 6716

OkGo性能调优:OkHttpClient配置参数详解

你是否还在为App网络请求缓慢而烦恼?是否遇到过接口超时、图片加载卡顿的问题?本文将带你深入了解OkGo框架中OkHttpClient的核心配置参数,通过简单几步优化,让你的应用网络性能提升30%以上。读完本文后,你将能够:掌握5个关键性能参数的调优技巧、理解缓存策略对用户体验的影响、学会根据网络类型动态调整配置。 ## 核心超时参数配置 OkGo框架默认的超时时间设置在[OkGo.java]...

gitblog_01049的博客 754

信息传输仿真:卫星通信系统仿真_(12).基于SystemVue的卫星通信仿真

SystemVue是Cadence公司开发的一款用于系统级设计和仿真的软件工具。它主要用于无线通信系统的设计和验证,特别是在卫星通信、雷达、射频和微波通信等领域。SystemVue提供了一个集成的环境,用户可以通过拖拽和连接各种预定义的模块来构建复杂的通信系统模型,从而进行性能分析和优化。

2401_87715305的博客 1370

okhttp-OkGo超时设置详解:避免请求无响应问题

你是否遇到过APP在弱网环境下长时间无响应?用户点击按钮后界面卡顿,最终显示"请求失败"?这些问题往往与网络超时设置不当有关。okhttp-OkGo作为Android平台常用的网络请求库,提供了完善的超时控制机制。本文将详细介绍如何通过合理配置超时参数,解决90%的网络请求无响应问题。 读完本文你将掌握: - 三种超时参数的区别与应用场景 - 全局超时与单次请求超时的设置方法 - 超时重试策略的...

gitblog_00627的博客 613

使用C# HslCommunication库实现三菱PLC通信(含完整代码示例)

在工业自动化开发中,上位机与PLC的通信是关键环节。HslCommunication库是一个开源的.NET工业通信库,支持三菱、西门子、欧姆龙等多个品牌PLC的通信协议。本文将演示如何通过库实现C#程序与三菱PLC的通信,并提供完整的代码示例。

StevenChen的博客 2288

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

OkGO使用详解

1.支持的常用功能一般的 get,post,put,delete,head,options请求基于Post的大文本数据上传,postString(),postJson()等多文件和多参数统一的表单上传(允许监听上传进度)支持一个key上传一个文件,也可以一个Key上传多个文件大文件下载和下载进度回调大文件上传和上传进度回调支持cookie的内存存储和持久化存储,支持传递自定义cookie提供网络缓...

Hfengxiang的博客 1万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

终极OkGo持续集成指南:Jenkins自动化测试与部署配置详解

推荐使用"轮询SCM",设置检查间隔为`H/15 * * * *`(每15分钟检查一次代码更新),或配置WebHook实现代码提交后自动触发构建。 ### 2.3 构建步骤配置 添加"执行shell"步骤,输入以下命令编译项目并执行测试: ```bash ./gradlew clean build test ``` 该命令会清理缓存、构建项目并运行`okserver/src/main/java/

gitblog_00187的博客 827

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Hermes 连接 DeepSeek:绕开三大卡点,接入 deepseek-v4-pro

本文面向想为 Hermes 接入 DeepSeek 的用户。它给出从安装到验证的完整路径,重点讲清 API Key、Base URL、模型名三个高频卡点,帮助你在几分钟内让 deepseek-v4-pro 真正建立连接。 ## 三个最常见的卡点 大多数接入失败都集中在三处:API Key、Base URL、模型名。任意一项填错,连接都无法建立。 - API Key:少抄一位字符,接口会直接返

gitblog_00085的博客 648

安卓项目实战之强大的网络请求框架okGo使用详解(一):实现get,post基本网络请求,下载上传进度监听以及对Callback自定义的深入理解

1.添加依赖 //必须使用 compile 'com.lzy.net:okgo:3.0.4' //以下三个选择添加,okrx和okrx2不能同时使用,一般选择添加最新的rx2支持即可 compile 'com.lzy.net:okrx:1.0.2' compile 'com.lzy.net:okrx2:2.0.2' compile 'com.lzy.net:okserver:2.0.5' ...

智玲君 6937

安卓项目实战之强大的网络请求框架okGo使用详解(二):深入理解Callback之自定义JsonCallback

更新中。。。

智玲君 6456

安卓项目实战之强大的网络请求框架okGo使用详解(五):扩展项目okRx,完美结合RxJava

前言 在第一篇讲解okGo框架添加依赖支持时,还记得我们额外添加的两个依赖吗,一个okRx和一个okServer,这两个均是基于okGo框架的扩展项目,其中okRx可以使请求结合RxJava一起使用,而okServer则提供了强大的下载上传功能,如断点支持,多任务管理等,本篇我们主要讲解okRx的使用。 OkRx主要功能 1,可以很完美结合RxJava做网络请求 2,在使用上比Retrofit更简...

智玲君 2651

安卓项目实战之强大的网络请求框架okGo使用详解(四):Cookie的管理

Cookie概念相关 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。同时我们也看到,由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制是需要借助于cookie机制来达到保存标识的目的,所谓session保持会话,对于客户端来说,就是cookie的自动管理。 cookie的内容主要包括:名字,值,过期时间,...

智玲君 3252

安卓项目实战之强大的网络请求框架okGo使用详解(六):扩展项目okServer,更强大的下载上传功能,支持断点和多任务管理

OkGo与OkDownload的区别就是,OkGo只是简单的做一个下载功能,不具备断点下载,暂停等操作,但是这在很多时候已经能满足需要了。 而有些app需要有一个下载列表的功能,就像迅雷下载一样,每个下载任务可以暂停,可以继续,可以重新下载,可以有下载优先级,这时候OkDownload就有用了。 https://github.com/jeasonlzy/okhttp-OkGo/wiki/OkDow...

智玲君 1688

安卓强大的网络请求框架okGo使用详解(一)

转载:https://blog.youkuaiyun.com/gpf1320253667/article/details/83515852

dlshtian的博客 2215

Android 11文件访问终极指南:OkGo适配Scoped Storage完全解决方案

OkGo是基于Http协议封装的OkHttp网络请求框架,比Retrofit更简单易用,支持RxJava、RxJava2,以及自定义缓存和批量断点下载管理等功能。对于Android 11及以上系统,Scoped Storage的实施改变了应用访问文件的方式,本指南将详细介绍如何使用OkGo适配Scoped Storage,解决文件访问问题。 [![OkGo框架logo](https://raw.

gitblog_00877的博客 1058
上一篇: Android动态权限申请的简单使用(permissionsdispatcher)
下一篇: Fiddler 配置夜神模拟器抓app包的流程
code_dream_wq
博客等级 码龄10年 51粉丝 199原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值