文章目录
  1. 1. 下载本sdk
  2. 2. 本sdk对第三方的依赖
  3. 3. json请求
    1. 3.0.1. json请求参数说明
    2. 3.0.2. json请求使用
  • 4. 下载download
    1. 4.0.1. 下载需要的必然条件,也就是本sdk需要用户确定的参数:
    2. 4.0.2. 回调接口信息
    3. 4.0.3. 如何使用下载服务
    4. 4.0.4. 执行下载后回调接口
  • 5. 上传upload
    1. 5.0.1. 上传需要的必然条件,也就是本sdk需要用户确定的参数:
    2. 5.0.2. 两种回调接口信息
    3. 5.0.3. 上传文件使用
  • 下载本sdk

    点我下载

    本sdk对第三方的依赖

    • fastJson
    • httpClient

    json请求

    json请求参数说明

    在json请求当中,我们设计的非常灵活。无论是请求体设置、响应体设置、回调通知均非常的灵活。

    1. 先说请求体,我们在发起请求的时候,有的有请求体有的可能没有请求体,如果有请求体我们将其定为泛型T,由用户根据接口需求指定请求体对象。
    2. 响应体定义为泛型M,根据接口返回数据由定义。
    3. 使用不同回调接口
    • 最简单回调接口:仅回调成功与失败,使用:com.android001.net.http.json.userIJsonCallable

      1
      2
      3
      4
      5
      public interface IJsonCallable<M> {
      public void onSuccess(M m);

      public void onFailed(int errorCode, String errorMsg);
      }
    • 最全回调接口:回调所有请求和响应信息:com.android001.net.http.json.user.IJsonHttpCallable

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      52
      53
      public interface IJsonHttpCallable<M> {
      /**
      * 成功
      *
      * @param m
      */
      public void onSuccess(M m);

      /**
      * sdk异常
      *
      * @param errorCode
      */
      public void onHttpRequestError(int errorCode);

      /**
      * 服务器状态异常:返回的非200-300之间的数
      *
      * @param errorCode
      */
      public void onResponseCodeError(int errorCode);

      /**
      * 服务器数据异常:返回数据
      *
      * @param errorCode
      * @param msg
      * @param m
      */
      public void onResponseDataError(String errorCode, String msg, M m);

      /**
      * 添加请求头
      *
      * @param requestHeaderMap
      */
      public void addRequestHeader(Map<String, String> requestHeaderMap);

      /**
      * 获得响应头
      *
      * @param responseHeaderMap
      */
      public void onResponseHeader(Map<String, String> responseHeaderMap);

      /**
      * 设置请求参数
      *
      * @param requestConfig
      */
      public void setRequestConfig(RequestConfig requestConfig);

      }
    • 请求配置回调接口:回调基本信息以及请求配置:com.android001.net.http.core.request.config.RequestConfig.ICustomRequestConfigCallable

      1
      2
      3
      4
      5
      6
      7
      public interface ICustomRequestConfigCallable<M> {
      public void onSuccess(M data);

      public void onFailed(int errorCode, String errorMsg);

      public void setRequestConfig(RequestConfig requestConfig);
      }
    • 请求头回调接口:回调基本信息以及请求头:com.android001.net.http.json.user.ICustomHeaderHttpCallable

      1
      2
      3
      4
      5
      6
      7
      public interface ICustomHeaderHttpCallable<M> {
      public void onSuccess(M m);

      public void onFailed(int errorCode, String errorMsg);

      public void addRequestHeader(Map<String, String> headerMap);
      }
    • 请求配置和请求头回调接口:回调基本信息以及请求头和请求配置参数:com.android001.net.http.json.user.ICustomHttpCallable

      1
      2
      3
      4
      public interface ICustomHttpCallable<M>
      extends ICustomHeaderHttpCallable<M>,
      ICustomRequestConfigCallable<M> {
      }

    说明:如果你想最近单的最快捷的使用,那么使用IJsonCallable接口即可。如果你想自定义回调内容,那么使用最全回调接口IJsonHttpCallable,然后自己再筛选即可。

    json请求使用

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    public static <T extends java.io.Serializable, M> void sendRequest(T requestInfo, java.lang.String url, java.lang.Class<M> responseClass, com.android001.net.http.json.user.IJsonCallable<M> httpCallable)

    public static <M> void sendRequest(java.lang.String url, java.lang.Class<M> responseClass, com.android001.net.http.json.user.IJsonCallable<M> httpCallable)

    public static <T extends java.io.Serializable, M> void sendRequest(T requestInfo, java.lang.String url, java.lang.Class<M> responseClass, com.android001.net.http.json.user.IJsonHttpCallable<M> httpCallable)

    public static <M> void sendRequest(java.lang.String url, java.lang.Class<M> responseClass, com.android001.net.http.json.user.IJsonHttpCallable<M> httpCallable)

    public static <T extends java.io.Serializable, M> void sendRequest(T requestInfo, java.lang.String url, java.lang.Class<M> responseClass, com.android001.net.http.json.user.ICustomRequestParamsCallable<M> httpCallable)
    public static <M> void sendRequest(java.lang.String url, java.lang.Class<M> responseClass, com.android001.net.http.json.user.ICustomRequestParamsCallable<M> httpCallable)

    public static <T extends java.io.Serializable, M> void sendRequest(T requestInfo, java.lang.String url, java.lang.Class<M> responseClass, com.android001.net.http.json.user.ICustomHttpCallable<M> httpCallable)

    public static <M> void sendRequest(java.lang.String url, java.lang.Class<M> responseClass, com.android001.net.http.json.user.ICustomHttpCallable<M> httpCallable)

    public static <T extends java.io.Serializable, M> void sendRequest(T requestInfo, java.lang.String url, java.lang.Class<M> responseClass, com.android001.net.http.json.user.ICustomHeaderHttpCallable<M> httpCallable)

    public static <M> void sendRequest(java.lang.String url, java.lang.Class<M> responseClass, com.android001.net.http.json.user.ICustomHeaderHttpCallable<M> httpCallable)

    json请求示例


    下载download

    下载需要的必然条件,也就是本sdk需要用户确定的参数:

    • 下载url
    • 请求体T requestInfo
    • 保存文件地址path
    • 线程池配置信息(用户不配置可直接使用默认项)

      回调接口信息

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      52
      /**
      * DownloadService执行下载,IDownloadServiceCallable回调通知下载状态、结果。
      * 本接口,面向用户,回调给用户。
      */
      public interface IDownloadServiceCallable {
      /**
      * 下载状态变更
      *
      * @param downloadItemInfo DownloadItemInfo内部的DownloadStatus变更。
      */
      public void onDownloadStatusChanged(DownloadItemInfo downloadItemInfo);

      /**
      * 可读取到的总长度:本地文件+本次可从输入流中读取到的长度。
      * 当单线程下载整个文件时:本地文件长度是固定的,本次从输入流中读取到的长度是固定的,所以就定下来文件的总长度了。
      * 但是当多线程分段下载时:这个值是不固定的。
      *
      * @param downloadItemInfo DownloadItemInfo内部的totalLength 文件总大小
      * @param downloadItemInfo DownloadItemInfo内部的currentLength 之前已经下载的文件大小
      */
      public void onTotalLengthReceived(DownloadItemInfo downloadItemInfo);

      /**
      * @param downloadItemInfo 下载信息
      * @param downloadPercent 当前下载百分比
      * @param speed 当前速度
      */
      public void onCurrentSizeChanged(DownloadItemInfo downloadItemInfo, double downloadPercent, long speed);

      /**
      * 下载成功
      *
      * @param downloadItemInfo 下载信息
      */
      public void onDownloadSuccess(DownloadItemInfo downloadItemInfo);

      /**
      * 下载暂停
      *
      * @param downloadItemInfo 下载信息
      */
      public void onDownloadPause(DownloadItemInfo downloadItemInfo);

      /**
      * 下载失败
      *
      * @param downloadItemInfo 下载信息
      * @param errorCode 错误码
      * @param errorMsg 错误信息
      */
      public void onDownloadError(DownloadItemInfo downloadItemInfo, int errorCode, String errorMsg);
      }

    如何使用下载服务

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    //1. 初始化下载服务
    com.android001.aitest.net.download.single.downloadService downloadService = new DownloadServiceImpl(IDownloadServiceCallable);
    //2. 执行下载
    simpleDownloadInfo = downloadService.download(
    Const.URL_WEXIN,
    filePath,
    T requestInfo,
    DefaultPoolParameter.getInstance()
    );
    //3. 暂停下载
    downloadService.pause(simpleDownloadInfo, new IPauseCallable() {
    @Override
    public void onSuccess(SimpleDownloadInfo<?> simpleDownloadInfo) {
    log(" pauseDownload success");

    }

    @Override
    public void onFailed(SimpleDownloadInfo<?> simpleDownloadInfo, int errorCode, String errorMsg) {
    log(" pauseDownload failed");
    }
    });

    //4. 取消下载
    downloadService.cancel(simpleDownloadInfo, new ICancelCallable() {
    @Override
    public void onSuccess(SimpleDownloadInfo<?> simpleDownloadInfo) {
    log(" cancelDownload success");
    }

    @Override
    public void onFailed(SimpleDownloadInfo<?> simpleDownloadInfo, int errorCode, String errorMsg) {
    log(" cancelDownload success");
    }
    });

    执行下载后回调接口

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    /**
    * DownloadService执行下载,IDownloadServiceCallable回调通知下载状态、结果。
    * 本接口,面向用户,回调给用户。
    */
    public interface IDownloadServiceCallable {
    /**
    * 下载状态变更
    *
    * @param downloadItemInfo DownloadItemInfo内部的DownloadStatus变更。
    */
    public void onDownloadStatusChanged(DownloadItemInfo downloadItemInfo);

    /**
    * 可读取到的总长度:本地文件+本次可从输入流中读取到的长度。
    * 当单线程下载整个文件时:本地文件长度是固定的,本次从输入流中读取到的长度是固定的,所以就定下来文件的总长度了。
    * 但是当多线程分段下载时:这个值是不固定的。
    *
    * @param downloadItemInfo DownloadItemInfo内部的totalLength 文件总大小
    * @param downloadItemInfo DownloadItemInfo内部的currentLength 之前已经下载的文件大小
    */
    public void onTotalLengthReceived(DownloadItemInfo downloadItemInfo);

    /**
    * @param downloadItemInfo 下载信息
    * @param downloadPercent 当前下载百分比
    * @param speed 当前速度
    */
    public void onCurrentSizeChanged(DownloadItemInfo downloadItemInfo, double downloadPercent, long speed);

    /**
    * 下载成功
    *
    * @param downloadItemInfo 下载信息
    */
    public void onDownloadSuccess(DownloadItemInfo downloadItemInfo);

    /**
    * 下载暂停
    *
    * @param downloadItemInfo 下载信息
    */
    public void onDownloadPause(DownloadItemInfo downloadItemInfo);

    /**
    * 下载失败
    *
    * @param downloadItemInfo 下载信息
    * @param errorCode 错误码
    * @param errorMsg 错误信息
    */
    public void onDownloadError(DownloadItemInfo downloadItemInfo, int errorCode, String errorMsg);
    }

    上传upload

    上传需要的必然条件,也就是本sdk需要用户确定的参数:

    • 上传url
    • 上传文件file
    • 上传请求头信息Map uploadParams
    • 回调上传结果:Class clazz, IUploadCallable uploadCallable

    两种回调接口信息

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //1.上传成功与否
    public interface IUploadCallable<M> {
    public void onSuccess(M dataEntity, String filePath);

    public void onFailed(int errorCode, String errorMsg, String filePath);
    }
    //2.上传成功、失败、大小
    public interface IUploadResumeCallable<M>
    extends IUploadCallable<M> {
    public void onSizeChange(long transferred);
    }

    上传文件使用

    1
    2
    3
    4
    5
    6
    7
    8
    9

    package com.android001.net.http.upload;

    public class UploadServiceImpl {
    public static <M> com.android001.net.http.upload.core.IUploadService<M> upload(java.lang.String url, java.io.File file, java.util.Map<java.lang.String,java.lang.String> uploadParams, java.lang.Class<M> clazz, com.android001.net.http.upload.interfaces.IUploadCallable<M> uploadCallable)

    public static <M> com.android001.net.http.upload.core.IUploadService<M> uploadRandomAccessFile(java.lang.String url, java.io.File file, java.util.Map<java.lang.String,java.lang.String> uploadParams, java.lang.Class<M> clazz, com.android001.net.http.upload.interfaces.IUploadResumeCallable<M> uploadCallable, long offset)

    public static <M> com.android001.net.http.upload.core.IUploadService<M> upload(java.lang.String url, java.io.File file, java.lang.Class<M> clazz, com.android001.net.http.upload.interfaces.IUploadCallable<M> uploadCallable)

    示例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    private void upload(String fileName) {

    final File uploadDir = new File(Environment.getExternalStorageDirectory(), "upload");
    File uploadFile = new File(uploadDir, fileName);
    UploadServiceImpl.upload(
    "https://api.github.com/markdown/raw",
    uploadFile,
    UploadMarkdwon.class,
    new IUploadCallable<UploadMarkdwon>() {
    @Override
    public void onSuccess(UploadMarkdwon uploadResult, String filePath) {
    Logger.e(TAG,"服务端返回结果:"+uploadResult.toString()+"\n"+"上传的文件地址:"+filePath);
    }

    @Override
    public void onFailed(int errorCode, String errorMsg, String filePath) {
    Logger.e(TAG,"上传文件失败,错误代码="+errorCode+" 错误信息:"+errorMsg+" 上传文件地址:"+filePath);
    }
    }
    );
    }
    文章目录
    1. 1. 下载本sdk
    2. 2. 本sdk对第三方的依赖
    3. 3. json请求
      1. 3.0.1. json请求参数说明
      2. 3.0.2. json请求使用
  • 4. 下载download
    1. 4.0.1. 下载需要的必然条件,也就是本sdk需要用户确定的参数:
    2. 4.0.2. 回调接口信息
    3. 4.0.3. 如何使用下载服务
    4. 4.0.4. 执行下载后回调接口
  • 5. 上传upload
    1. 5.0.1. 上传需要的必然条件,也就是本sdk需要用户确定的参数:
    2. 5.0.2. 两种回调接口信息
    3. 5.0.3. 上传文件使用