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.
Smile Wei wechat
请扫码关注我的微信公众号