OkHttp 的简单封装

OkhttpIntegration

目前对应 OkHttp 版本3.8.1.

Demo地址

image

使用

Android Studio

下载 the latest JAR or grab via Maven:

    <dependency>
        <groupId>com.smile</groupId>
        <artifactId>okhttpintegration</artifactId>
        <version>1.0.4</version>
        <type>pom</type>
    </dependency>

or Gradle:

    compile 'com.smile:okhttpintegration:1.0.4'

初始化

    public class MyApplication extends Application{ 
        @Override
        public void onCreate(){
            super.onCreate();

            OkHttp.setConnectTimeOut(30);
            OkHttp.setReadTimeOut(30);
            OkHttp.setWriteTimeOut(30);
            OkHttp.setUploadReadTimeOut(30);
            OkHttp.setUploadWriteTimeOut(30);
            OkHttp.setRetryCount(2);
            OkHttp.setErrorCode("setErrorCode");
            OkHttp.setErrorStatus("state", "0000");
            OkHttp.setUserAgent("setUserAgent");
        }
    }
方法 描述
setConnectTimeOut(30) 与服务器建立连接超时时间
setReadTimeOut(30) 设置读取响应超时时间
setWriteTimeOut(30) 设置写入响应超时时间
setUploadReadTimeOut(30) 设置上传文件读取响应超时时间
setUploadWriteTimeOut(30) 设置上传文件写入响应超时时间
setRetryCount(2) 设置请求失败时的重试次数
setUserAgent("") 设置UserAgent

setErrorCode("") 和 setErrorStatus("", "")

一般情况下,对接口请求响应结果的判断有两种情况:

  • 返回的 json 数据中会包含诸如 error_code 的 key,用来表明此接口响应失败,如下代码所示;
    {
        request: "http://api.tuikexing.com",
        error_code: 50001,
        error: "!",
        error_description: "{错误码0: 1502183653-2442}"
    }
  • 返回的 json 数据结构有固定的诸如 status 的 key,根据 status key 所对应的 value 值来判断此接口是响应失败,你可以指定当 status 为 200 时代表接口响应成功。如下所示:
    {
        status: 200,
        msg: "success",
        data: [ ],
        totalPage: 0,
        totalCount: 0
    }

注意 任何时候对请求响应结果的判断不要依赖于 http 协议的 CODE 值,而应该首先检查返回的 json 数据结构是否存在 error_code 字段或 status 的值。

GET

   Map<String, Object> params = new HashMap<>();
   params.put("lang", "zh");
   params.put("type", 2);
   params.put("page", 1);
   params.put("pageSize", 10);
   OkHttp.get(HOME, params, new OkCallback() {
       @Override
       public void onResponse(String response) {
           Log.e("onResponse", response);
           Toast.makeText(context, response, Toast.LENGTH_SHORT).show();
       }
 
       @Override
       public void onFailure(String error) {
           Log.e("onFailure", error);
           Toast.makeText(context, error, Toast.LENGTH_SHORT).show();
       }
   });

POST

   Map<String, Object> params = new HashMap<>();
   params.put("email", "smile");
   params.put("password", "smile");
   OkHttp.post(LOGIN, params, new OkCallback() {
       @Override
       public void onResponse(String response) {
           Log.e("onResponse", response);
           Toast.makeText(context, response, Toast.LENGTH_SHORT).show();
       }
 
       @Override
       public void onFailure(String error) {
           Log.e("onFailure", error);
           Toast.makeText(context, error, Toast.LENGTH_SHORT).show();
       }
   });

POST JSON

   User user = new User();
   user.setAge(10);
   user.setName("Smile");
   user.setSex("男");
   String json = new Gson().toJson(user);
   
   OkHttp.postJson(LOGIN, json, new OkCallback() {
       @Override
       public void onResponse(String response) {
           Log.e("onResponse", response);
           Toast.makeText(context, response, Toast.LENGTH_SHORT).show();
       }
 
       @Override
       public void onFailure(String error) {
           Log.e("onFailure", error);
           Toast.makeText(context, error, Toast.LENGTH_SHORT).show();
       }
   });

UPLOAD FILE

   Map<String, Object> params = new HashMap<>();
   params.put("email", "smile");
   params.put("password", "smile");
   
   OkHttp.upload(LOGIN, params, "file[]", "file01", new OkCallback() {
       @Override
       public void onResponse(String response) {
           Log.e("onResponse", response);
           Toast.makeText(context, response, Toast.LENGTH_SHORT).show();
       }
 
       @Override
       public void onFailure(String error) {
           Log.e("onFailure", error);
           Toast.makeText(context, error, Toast.LENGTH_SHORT).show();
       }
   });

UPLOAD MULTIPLE FILE

   Map<String, Object> params = new HashMap<>();
   params.put("email", "smile");
   params.put("password", "smile");
   List<String> list = new ArrayList<>();
   list.add("file01");
   list.add("file02");
   list.add("file03");
   
   OkHttp.uploadMulti(LOGIN, params, "file[]", list, new OkCallback() {
       @Override
       public void onResponse(String response) {
           Log.e("onResponse", response);
           Toast.makeText(context, response, Toast.LENGTH_SHORT).show();
       }
 
       @Override
       public void onFailure(String error) {
           Log.e("onFailure", error);
           Toast.makeText(context, error, Toast.LENGTH_SHORT).show();
       }
   });

License

OkHttpDemo for Android
Copyright (c) 2017 Smile Wei (http://github.com/EasyToForget).

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,991评论 19 139
  • 第一次写有点小激动 算是总结吧! 最近一直听群友说Retrofit + Rxjava + OkHttp有多牛逼多好...
    佑佑2阅读 1,017评论 0 5
  • 关于OkHttp的基础使用可以看我之前写的这篇文章 但是每次写网络请求,都要写一大堆重复的东西,所以肯定要封装一下...
    芒果味的你呀阅读 1,171评论 0 6
  • 对于Okhttp的简单封装,OkHttpParams来自async-http,存放body数据。OkhttpUti...
    lhl_012阅读 642评论 0 1
  • # 一度蜜v3.0协议 --- # 交互协议 [TOC] ## 协议说明 ### 请求参数 下表列出了v3.0版协...
    c5e350bc5b40阅读 672评论 0 0