精华内容
下载资源
问答
  • 今天开发中运到bmob和OKhttp依赖包冲突的问题,随手记录一下解决过程: 两个依赖都添加成功后,不管怎么同步都不会报错,但 Run'app' 时就报错: Error:Execution failed for task ':app:...

    今天开发中运到bmob和OKhttp依赖包冲突的问题,随手记录一下解决过程:

    两个依赖都添加成功后,不管怎么同步都不会报错,但 Run'app' 时就报错:

    Error:Execution failed for task ':app:transformClassesWithDexForDebug'.
    >com.android.build.api.transform.TransformException:com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.dex.DexException: Multiple dex files define Lokio/
    Sink;

    截图:

    立即双击shift,搜索Sink

    可以看到okio重复了(Bmob为了节约开发者的开发成本,在添加他的依赖包时,其实已经是有其他包含了okhttp、okio、rxjava、rxandroid、gson的库)如需去除可以exclude掉这些已包含在bmobsdk中的包;

    不信我们切换到project打开项目工程:

    那是不是可以直接删掉这okio的jar包就可以了?

    远程的添加依赖方式不行(删了也没用),本地jar包就可以。

    刚好,我项目OKhttp用的是添加jar包的形式,只需把重复的okio-1.13.0.jar删除即可解决。

     

    -----end-----

     

     

    展开全文
  • 一、OkHttp 简介、 二、Http 版本简介

    OkHttp 系列文章目录

    【OkHttp】OkHttp 简介 ( OkHttp 框架特性 | Http 版本简介 )







    一、OkHttp 简介



    OkHttp 是 Square 开发开源网络框架 , 目前已经替代了 HttpConnection 和 HttpClient ;

    OkHttp 官网 : https://square.github.io/okhttp/

    在这里插入图片描述


    使用 OkHttp 可以更快的下载并节省带宽 ; OkHttp 是一格高效的 HTTP 客户端 , 具有以下特性 :

    • 套接字复用 : HTTP/2 支持 Socket 套接字复用 ;
    • 连接池机制 : 如果 HTTP/2 不可用 , 则使用连接池机制 , 降低请求延迟 ;
    • 数据压缩 : 底层实现 GZIP 数据压缩 , 缩小下载内容的大小 ;
    • 缓存链接 : 通过缓存技术 , 避免网络重复请求的情况 ;
    • 重连接机制 : 网络出现问题后 , OkHttp 会尝试恢复链接 , 对用户完全透明 ;




    二、Http 版本简介



    当前 HTTP 协议分为以下几个版本 , 根据时间排序 :

    • HTTP/0.9 : 1991 1991 1991 年 , 只能进行 GET 请求 , 不能传输数据包 , 规定客户端服务器通信格式 ; ( 不是正式标准 )
    • HTTP/1.0 : 1996 1996 1996 年 , 增加了 PUT , PATCH , HEAD , OPTIONS , DELETE 等命令 , 不再限制传输内容的格式 ; ( 正式标准 )
    • HTTP/1.1 : 1997 1997 1997 年 , 支持 长连接 , 带宽节约 , HOST 域 , 管道机制 , 分块传输编码 等机制 ; ( 目前使用最广泛的版本 )
    • HTTP/2 : 2015 2015 2015 年 , 支持 多路复用 , 服务器推送 , 头信息压缩 , 二进制协议 等机制 ; ( 逐步推进覆盖市场 )

    目前使用最广泛的版本是 HHTP/1.1 , 但是 2015 2015 2015 年后 , HTTP/2 出现 , 逐渐覆盖市场 ;

    展开全文
  • OKHttp

    2020-09-12 17:37:34
    缓存响应数据来减少重复的网络请求;当网络出现拥挤的时候,使用OKHttp可以避免常见的网络问题,如果服务器配端置了多个IP地址,当第一个IP连接失败的时候,OkHttp会自动尝试下一个IP。对现在IPv4+IPv6 中常见的把...

    简介

    OkHttp是一个高效的HTTP库,它建立在HttpUrlConnection之上。OkHttp支持 SPDY ,共享同一个Socket来处理同一个服务器的所有请求,如果SPDY不可用,则通过连接池来减少请求延时;无缝的支持GZIP来减少数据流量;缓存响应数据来减少重复的网络请求;当网络出现拥挤的时候,使用OKHttp可以避免常见的网络问题,如果服务器配端置了多个IP地址,当第一个IP连接失败的时候,OkHttp会自动尝试下一个IP。对现在IPv4+IPv6 中常见的把服务冗余部署在不同的数据中心上,OkHttp 将使用现在TLS特性(SNI ALPN) 来初始化新的连接,如果连接失败,将切换到SLLv3;另外,OkHttp还处理了代理服务器问题和SSL连接失败的问题。

    小知识
    SPDY(读作“SPeeDY”)是Google开发的基于TCP的应用层协议,用以最小化网络延迟,提升网络速度,优化用户的网络使用体验。SPDY并不是一种用于替代HTTP的协议,而是对HTTP协议的增强。新协议的功能包括数据流的多路复用、请求优先级以及HTTP报头压缩。谷歌表示,引入SPDY协议后,在实验室测试中页面加载速度比原先快64%。

    OkHttp直接架构于Java Socket本身而没有依赖于其他第三方类库(如下图所示),因此开发者可以直接用在JVM中,而不仅仅是Android。为了简化代码迁移速度,OkHttp实现了类似于HttpUrlConnection与Apache Client的接口,比如:okhttp-urlconnection模块实现了 java.net.HttpURLConnection 中的API、okhttp-apache模块实现了HttpClient中的API。因此使用OkHttp重构之前的代码,基本上不需要再做大量的工作。
    在这里插入图片描述
    目前OkHttp支持如下特性:

    • 支持基于HTTP/2以及SPDY的多路复用
    • 支持连接池、会降低并发连接数
    • 透明GZIP加密减少传输的数据量
    • 响应缓存避免大量重复请求
    • 同时支持同步的阻塞式调用与异步回调式调用

    示例

    创建SpringBoot项目,添加依赖

    <dependency>
        <groupId>com.squareup.okhttp3</groupId>
        <artifactId>okhttp</artifactId>
        <version>4.8.1</version>
    </dependency>
    
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    

    服务器端代码

    @RestController
    public class DispatchController {
        @GetMapping("/get")
        public String get() {
            return "get";
        }
    
        @PostMapping("/post")
        public String post(String username,String password) {
            System.out.println(username+" : "+password);
            return "post";
        }
    
        @RequestMapping("/header")
        public String header(HttpServletRequest request, HttpServletResponse response) {
            Enumeration<String> headerNames = request.getHeaderNames();
            while (headerNames.hasMoreElements()) {
                String name = headerNames.nextElement();
                String value = request.getHeader(name);
                System.out.println(name + " : " + value);
            }
    
            response.setHeader("xxx", "13579");
            response.setHeader("yyy", "24680");
            return "header";
        }
    }
    

    OkHttp测试代码

    @SpringBootTest
    public class OkHttpTest {
        @Test
        public void get() throws IOException {
            OkHttpClient client = new OkHttpClient();
            Request request = new Request.Builder()
                    .url("http://localhost/od/get")
                    .method("GET", null)
                    .build();
            Response response = client.newCall(request).execute();
            if (response.isSuccessful()) {
                String res = response.body().string();
                System.out.println(res);
            } else {
                throw new IOException("Unexpected code " + response);
            }
        }
    
        @Test
        public void post() throws IOException {
            OkHttpClient client = new OkHttpClient().newBuilder().build();
            MediaType mediaType = MediaType.parse("text/plain");
            RequestBody body = RequestBody.Companion.create("", mediaType);
            String username = "lisi";
            String password = "123456";
            Request request = new Request.Builder()
                    .url("http://localhost/od/post?username=" + username + "&password=" + password)
                    .method("POST", body)
                    .build();
            Response response = client.newCall(request).execute();
            System.out.println(response.body().string());
            Headers headers = response.headers();
        }
    
        @Test
        public void header() throws IOException {
            OkHttpClient client = new OkHttpClient();
            Request request = new Request.Builder()
                    .url("http://localhost/od/header")
                    .addHeader("Xaa", "application/json; q=0.5")
                    .addHeader("Xbb", "application/vnd.github.v3+json")
                    .build();
            Response response = client.newCall(request).execute();
            if (response.isSuccessful()) {
                String res = response.body().string();
                System.out.println(res);
                Headers headers = response.headers();
                System.out.println(headers.get("xxx"));
                System.out.println(headers.get("yyy"));
            } else {
                throw new IOException("Unexpected code " + response);
            }
        }
    
    }
    
    展开全文
  • OkHttp

    2016-07-04 20:50:10
    OkHttp

    OkHttp简介

    http是现在主流应用使用的网络请求方式, 用来交换数据和内容, 有效的使用HTTP可以使你的APP 变的更快和减少流量的使用

    OkHttp 是一个很棒HTTP客户端:

    • 支持SPDY, 可以合并多个到同一个主机的请求
    • 使用连接池技术减少请求的延迟(如果SPDY是可用的话)
    • 使用GZIP压缩减少传输的数据量
    • 缓存响应避免重复的网络请求
    • 当你的网络出现拥挤的时候,就是OKHttp 大显身手的时候, 它可以避免常见的网络问题,如果你的服务是部署在不同的IP上面的,如果第一个连接失败, OkHTtp会尝试其他的连接. 这个对现在IPv4+IPv6 中常见的把服务冗余部署在不同的数据中心上. OkHttp 将使用现在TLS特性(SNI ALPN) 来初始化新的连接. 如果握手失败, 将切换到SLLv3

    使用OkHttp很容易, 同时支持异步阻塞请求和回调.

    如果你使用OkHttp ,你不用重写你的代码, okhttp-urlconnection模块实现了 java.net.HttpURLConnection 中的API, okhttp-apache模块实现了HttpClient中的API。

    疑问,什么是SPDY?

    SPDY(读作“SPeeDY”)是Google开发的基于TCP的应用层协议,用以最小化网络延迟,提升网络速度,优化用户的网络使用体验。SPDY并不是一种用于替代HTTP的协议,而是对HTTP协议的增强。新协议的功能包括数据流的多路复用、请求优先级以及HTTP报头压缩。
    谷歌表示,引入SPDY协议后,在实验室测试中页面加载速度比原先快64%。

    在studio中使用原生OkHttp

    1.在app 下的build.gradle中配置远程依赖

    dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile files('libs/gson-2.2.4.jar')
    compile files('libs/universal-image-loader-1.9.5.jar')
    compile 'com.android.support:appcompat-v7:23.4.0'
    compile 'com.android.support:design:23.4.0'
    compile files('libs/xUtils-2.4.7.jar')
    compile project(':library')
    compile 'com.squareup.okhttp:okhttp:2.4.0'//添加
    compile 'com.squareup.okio:okio:1.5.0'//添加
    }

    2.在代码中使用

    get请求

     public void getColumnData() {
            OkHttpClient okHttpClient = new OkHttpClient();
    
    
            final Request request = new Request.Builder()
                    .url(JingBangApplication.HOST_ADDRESS + "/client/pms/programas.json")
    
                    .build();
    
            okHttpClient.newCall(request).enqueue(new Callback() {
                @Override
                public void onFailure(Request request, IOException e) {
                    LogUtil.d("ssssss", "请求失败--->" + request.body());
                }
    
                @Override
                public void onResponse(Response response) throws IOException {
    
                }
    
    
            });

    post请求

    
        public void getColumnData() {
            FormEncodingBuilder builder = new FormEncodingBuilder();
            builder.add("username","哈哈");
    
            OkHttpClient okHttpClient = new OkHttpClient();
    
    
            final Request request = new Request.Builder()
                    .url(JingBangApplication.HOST_ADDRESS + "/client/pms/programas.json")
                    .post(builder.build())
                    .build();
    
            okHttpClient.newCall(request).enqueue(new Callback() {
                @Override
                public void onFailure(Request request, IOException e) {
    
                }
    
                @Override
                public void onResponse(Response response) throws IOException {
    
    
                }
    
    
            });
        }

    • 注意:在回调的方法中response参数只能使用一次
    展开全文
  • Android OkHttp完全解析 是时候来了解OkHttp

    万次阅读 多人点赞 2015-08-24 15:36:45
    转载请标明出处: ...最近在群里听到各种讨论okhttp的话题,可见okhttp的口碑相当好了。再加上Google貌似在6.0版本里面删除了HttpClient相关API,对于这个行为不做评价。为了更好的在应对网络访问,学习
  • retrofit/okhttp 网络差 重复请求的问题

    千次阅读 2018-11-29 10:27:58
    问题描述:我在使用retrofit...经测试 服务器debug 网络差 出现几率比较高,导致服务器数据重复 retrofit初始化如下: mRetrofit = new Retrofit.Builder() .baseUrl(Api.BASE_URL) .addConverterFactory(Gson...
  • okhttp

    2018-03-17 09:25:42
    在android studio中可以很方便地在gradle中添加依赖[html] view plain copycompile group: 'com.squareup.okhttp', name: 'okhttp', version: '2.7.5' 点击可查看okhttp的最新版本 同步之后我们先来看看...
  • Okhttp

    千次阅读 2020-08-13 16:41:05
    缓存响应内容,避免一些完全重复的请求 当网络请求出现问题的时候okhttp依然坚守自己的职责,它会自动恢复一般的连接问题,如果你的服务有多个ip地址,当第一个ip请求失败时,Okhttp会交替尝试你配置的其
  • OKHTTP

    2019-02-17 18:38:38
    OKHttp简介 OKHttp是一个处理网络请求的开源框架,Android 当前最火热网络框架,由移动支付Square公司贡献,用于替代HttpUrlConnection和Apache HttpClient(android API23 6.0里已移除HttpClient)。 ...
  • 关于retrofit/okhttp 网络差 重复请求的问题

    万次阅读 热门讨论 2017-04-19 18:19:01
    问题顺应时代潮流,我用了retrofit做网络....经测试 服务器debug 网络差 出现几率比较高导致服务器数据重复retrofit初始化如下: mRetrofit = new Retrofit.Builder() .baseUrl(Api.BASE_URL) .addConverterFa

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,818
精华内容 3,527
关键字:

okhttp版本重复