Fix-2022.5.8.1

1.JSON类转换异常;
2.ResponseBody新增判断是否是JSONObjec、JSONArray;
3.OkHttp Cookie持久化逻辑修改;
4.JSON兼容处理;

OKApi

Gitee-OkApi、GitHub-OkApi
Android接口联调工具
1.内含JSON、okhttp、okio
2.支持Get、Post、Put、Delete、Patch
3.支持文件上传进度监听
4.RSA、AES

okapi_2022.5.8.1.aar

Maven

1.build.grade | setting.grade

repositories {...maven { url 'https://jitpack.io' }
}

2./app/build.grade

dependencies {implementation 'com.github.RelinRan:OkApi:2022.5.8.1'
}

权限

1.网络权限

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

2.非https请求,AndroidManifest.xml中application标签设置属性:

android:usesCleartextTraffic="true"

初始化

注意在Application里初始化

Configure configure = Api.initialize(this);
configure.debug(true);//调试模式,可以查看日志
configure.url(Api.BETA, "http://47.108.248.71:8109");//设置测试环境地址
configure.url(Api.ONLINE, "https://www.yiketianqi.com");//设置线上环境地址
configure.address(Api.BETA);//设置当前环境地址
configure.contentType(Api.JSON);//全局请求方式JSON
configure.addInterceptor(xxx);//添加拦截器
configure.singleton(false);//客户端单例模式.默认false,考虑到一个页面多个接口同时异步请求情况。

生命周期

默认页面标识

Api api = new OkApi();
RequestParams params = new RequestParams();
api.get(context, "/business/editShelf", params,null);@Override
protected void onDestroy() {super.onDestroy();api.cancel(context);
}

自定义标识

Api api = new OkApi();
RequestParams params = new RequestParams();
params.add(Api.REQUEST_TAG,"tag-1");
api.get(context, "/business/editShelf", params,null);@Override
protected void onDestroy() {super.onDestroy();api.cancel("tag-1");
}

表单

//方法一
Api.initialize(this).contentType(Api.FORM_DATA);
//方法二
Configure.Config().contentType(Api.FORM_DATA);
//方法三
RequestParams params = new RequestParams();
params.addHeader(Header.CONTENT_TYPE,Api.FORM_DATA);

JSON

JSON工具,请点击Gitee-JSON 或 GitHub-JSON

//方法一
Api.initialize(this).contentType(Api.JSON);
//方法二
Configure.Config().contentType(Api.JSON);
//方法三
RequestParams params = new RequestParams();
params.addHeader(Header.CONTENT_TYPE,Api.JSON);

GET

Api api = new OkApi();
RequestParams params = new RequestParams();
params.add("key","value");
api.get(context, "/business/editShelf", params, new OnRequestListener() {@Overridepublic void onRequestSucceed(Request request, Response response) {ApiLog.i("Api", response.body());}@Overridepublic void onRequestFailed(Request request, Exception exception) {}
});

POST

Api api = new OkApi();
RequestParams params = new RequestParams();
params.add("key","value");
api.post(context, "/business/editShelf", params, new OnRequestListener() {@Overridepublic void onRequestSucceed(Request request, Response response) {ApiLog.i("Api", response.body());}@Overridepublic void onRequestFailed(Request request, Exception exception) {}
});

实体转换

JSON工具,请点击Gitee-JSON 或 GitHub-JSON

@Override
public void onRequestSucceed(Request request, Response response) {User user = response.convert(User.class);
}

实体上传

Api api = new OkApi();
RequestParams params = new RequestParams();
User user = new User();
user.setName("OkApi");
String json = JSON.toJson(user);
params.add(json);
api.get(context, "/business/editShelf", params, new OnRequestListener() {@Overridepublic void onRequestSucceed(Request request, Response response) {ApiLog.i("Api", response.body());}@Overridepublic void onRequestFailed(Request request, Exception exception) {}
});

切换域名

Api api = new OkApi();
RequestParams params = new RequestParams();
params.addHeader(Api.DOMAIN,"http://47.206.248.71:8006");
api.get(context, "/business/editShelf", params, new OnRequestListener() {@Overridepublic void onRequestSucceed(Request request, Response response) {ApiLog.i("Api", response.body());}@Overridepublic void onRequestFailed(Request request, Exception exception) {}
});

文件上传

Api api = new OkApi();
RequestParams params = new RequestParams();
File file = new File("/storeage/xxxx.png")
params.add("file",file);
params.addHeader(Header.CONTENT_TYPE,Api.FORM_DATA);
api.post(context, "/business/editShelf", params, new OnRequestListener() {@Overridepublic void onRequestSucceed(Request request, Response response) {ApiLog.i("Api", response.body());}@Overridepublic void onRequestFailed(Request request, Exception exception) {}
});

上传进度

Api api = new OkApi();
RequestParams params = new RequestParams();
params.add("file",file);
params.addHeader(Header.CONTENT_TYPE,Api.FORM_DATA);
api.upload(context, "/upload/file", params, new OnBufferedSinkListener() {@Overridepublic void onBufferedSinkWrite(long contentLength, long bytes) {// TODO:显示文件上传进度}
}, new OnRequestListener() {@Overridepublic void onRequestSucceed(Request request, Response response) {// TODO:服务器请求成功}@Overridepublic void onRequestFailed(Request request, Exception exception) {// TODO:服务器请求失败}
});

文件下载

1.在res/新建xml文件夹,在xml文件夹新建path.xml

<?xml version="1.0" encoding="utf-8"?>
<paths><root-pathname="root"path="/storage/emulated/0" /><files-pathname="files"path="/storage/emulated/0/Android/data/${applicationId}/files" /><cache-pathname="cache"path="/storage/emulated/0/Android/data/${applicationId}/cache" /><external-pathname="Download"path="/storage/emulated/0/Android/data/${applicationId}/cache/Download" />
</paths>

2.权限,注意6.0以上还需要动态申请权限

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

3.FileProvider配置

<providerandroid:name="androidx.core.content.FileProvider"android:authorities="${applicationId}.fileprovider"android:exported="false"android:grantUriPermissions="true"><meta-dataandroid:name="android.support.FILE_PROVIDER_PATHS"android:resource="@xml/paths" />
</provider>

4.下载操作

Downloader.Builder builder = new Downloader.Builder(this);
builder.url("http://download.tianditu.com/download/mobile/Tiandituapi3.0.2%2820190103-02%29.zip");
builder.listener(new OnDownloadListener() {@Overridepublic void onDownloading(long total, long progress) {}@Overridepublic void onDownloadCompleted(File file) {}@Overridepublic void onDownloadFailed(Exception e) {}
});
builder.breakpoint(true);
builder.build();

RSA

初始化

以下设置会有默认值

//公钥字符串
RSA.PUBLIC_KEY = "xxx";
//私钥字符串
RSA.PRIVATE_KEY = "xxx";
//签名算法
RSA.SIGNATURE_ALGORITHM = "SHA1withRSA";
//加密算法
RSA.ENCRYPT_ALGORITHM = "RSA/ECB/PKCS1Padding";
//解密算法
RSA.DECRYPT_ALGORITHM = "RSA/ECB/PKCS1Padding";

加签

String sign(String param);

验签

boolean verifySign(String param, String sign);

加密

String encrypt(String param);

解密

String decrypt(String param);

AES

初始化

AES.SECRET_KEY = "xxx";

加密

String encrypt(String content);

解密

String decrypt(String content);

Android OkApi相关推荐

  1. Unity5.6+ 导出Android 应用程序apk的环境配置及导出过程

    首先下载并安装安卓SDK和java的JDK 安卓sdk下载: http://www.android-studio.org/ 也可以在这下载: 链接:http://pan.baidu.com/s/1bp ...

  2. Android 的NDK的Makefile编写

    Android.mk 是google根据Linux GNU Makefile精简编译脚本.具体来说:这就是GNU Makefile的一小部分. 举一个简单例子: LOCAL_PATH := $(cal ...

  3. Android Animation (安卓动画)概念简介

    Android Animation Android 四种动画分别为逐帧动画和补间动画.属性动画.过渡动画: Frame Animation (逐帧动画) 实现方式:xml 和 Java代码 图片跳转的 ...

  4. 基于Android和SpringBoot的购物App

    (Shopping)购物应用商城 本软件使用Android和SpringBoot.JavaWeb技术实现:并结合百度LBS平台的SDK.支付宝App支付客户端SDK.MobTech的ShareSDK: ...

  5. Android数据持久化:SharePreference

    SharePreference:作为Android数据持久化的一种,具有一定的便捷性,适合存储一些体积小的数据. 存储数据方式:键值对的方式,类似于Map: 利用SharePreference.Edi ...

  6. Android数据持久化:文件存储

    数据持久化: 数据可分为瞬时数据和关键数据.保存在内存之中的数据是瞬时数据,而对于一些关键性数据,后期需要持续使用的,应当保存在存储设备中: 持久化保存方式: 文件存储.SharePreference ...

  7. Android Studio中RecycerView依赖库加载问题

    依赖包导入思考: 参考资料:recycleview导包问题 打开修改本项目中的build.gradle; 切勿着急添加包,应当提前查看其中的版本号(因为加载的v7包要和其版本保持一致性): 例如: 因 ...

  8. Android布局优化之include、merge、ViewStub

    include:引入重复使用的相同布局 merge:减少include布局的层级,将子元素直接添加到merge标签的parent中 ViewStub:其实就是一个宽高都为0的一个View,它默认是不可 ...

  9. Android动画之帧动画和补间动画

    Android系统提供三种动画:帧动画.补间动画和属性动画.这里先分析总结帧动画和补间动画. FrameAnimation 帧动画,通俗来说就是按照图片动作顺序依次播放来形成动画,创建帧动画可以用 x ...

最新文章

  1. STL中list的使用(理论)
  2. 怎样删去csv中重复行_4个锦囊,祝你快速删去Excel中的重复数据
  3. 计算机小知识点GIF,计算机基础全部知识点 讲解.doc
  4. python基础 实战作业 ---Excel基本读写与数据处理
  5. ajax 页面部分先显示图片后出数据
  6. 《游戏大师Chris Crawford谈互动叙事》一1.2 两种思维方式
  7. 【ora10,4】oracle后台进程介绍:
  8. 用按键精灵2014怎么开发后台自动喊话的游戏脚本
  9. 人工智能系列:AI 可视化训练平台
  10. Pandas(九)--数据采样
  11. 创业者的噩梦 - 明明我先想到的
  12. 计算机基础错题笔记_计算机一级
  13. web前端开发工程师的竞争力体现在哪里?
  14. db2实例和数据库关系
  15. python pytorch语音识别_PyTorch通过ASR实现语音到文本端的模型以及pytorch语音识别(speech) - pytorch中文网...
  16. Error running 'PY201': Cannot run program C:\Users\GJ\AppData\Local\Programs\Python\Python37\python
  17. 04-0006 MATLAB 弹幕壁纸
  18. 10岁男孩开灯睡觉骨龄发育慢4年上热搜,开灯睡觉都有什么危害?
  19. java开发工程师报名费多少_java开发工程师薪水有多少
  20. centos 7 指令集

热门文章

  1. 5.4 PCIe——硅后测试
  2. 公司经营管理中存在的几个问题
  3. java程序u盘照片自动复制粘贴_U盘自动复制文件
  4. css动画实现转盘旋转,1.使用css3实现大转盘
  5. MKS SERVO42C 闭环步进电机 使用说明 V1.1 (三) 串口通讯
  6. 使用 /sys 文件系统访问 Linux 内核
  7. 亲自动手制作一台迷你小主机
  8. 自动驾驶 Apollo 源码分析系列,感知篇(六):车道线 Dark SCNN 算法简述及车道线后处理代码细节简述
  9. 了解计算机技术的课件,认识计算机第一信息技术PPT课件.ppt
  10. AI 音辨世界:艺术小白的我,靠这个AI模型,速识音乐流派选择音乐