# OkApi
**Repository Path**: relin/OkApi
## Basic Information
- **Project Name**: OkApi
- **Description**: Android 接口调用工具
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2022-01-25
- **Last Updated**: 2023-09-25
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
#### OkApi
Android接口联调工具
1.内含[JSON](https://github.com/RelinRan/JSON)、okhttp、okio
2.支持Get、Post、Put、Delete、Patch
3.文件上传进度
4.RSA、AES
#### 资源
|名称|来源|操作|
|-|-|-|
|okapi.aar|Github|[下载](https://github.com/RelinRan/OkApi/blob/master/aar)|
|OkApi|GitHub|[查看](https://github.com/RelinRan/OkApi)|
|Oson|GitHub|[查看](https://github.com/RelinRan/Oson)|
|JSON|GitHub|[查看](https://github.com/RelinRan/JSON)|
#### Maven
1.build.grade | setting.grade
```
repositories {
...
maven { url 'https://jitpack.io' }
}
```
2./app/build.grade
```
dependencies {
implementation 'com.github.RelinRan:OkApi:2023.9.25.1'
}
```
#### 初始化
网络权限
```
```
非https请求,AndroidManifest.xml中application标签设置属性:
```
android:usesCleartextTraffic="true"
```
注意在Application里初始化
```
Configure configure = Api.initialize(this);
configure.debug(true);//调试模式,可以查看日志
configure.url(Api.TEST, "http://47.108.248.71:8109");//设置测试环境地址
configure.url(Api.RELEASE, "https://www.yiketianqi.com");//设置线上环境地址
configure.address(Api.TEST);//设置当前环境地址
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](https://github.com/RelinRan/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() {
@Override
public void onRequestSucceed(Request request, Response response) {
ApiLog.i("Api", response.body());
}
@Override
public 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() {
@Override
public void onRequestSucceed(Request request, Response response) {
ApiLog.i("Api", response.body());
}
@Override
public void onRequestFailed(Request request, Exception exception) {
}
});
```
#### [实体转换](https://github.com/RelinRan/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.body(json);
api.get(context, "/business/editShelf", params, new OnRequestListener() {
@Override
public void onRequestSucceed(Request request, Response response) {
ApiLog.i("Api", response.body());
}
@Override
public 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() {
@Override
public void onRequestSucceed(Request request, Response response) {
ApiLog.i("Api", response.body());
}
@Override
public 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() {
@Override
public void onRequestSucceed(Request request, Response response) {
ApiLog.i("Api", response.body());
}
@Override
public 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() {
@Override
public void onBufferedSinkWrite(long contentLength, long bytes) {
// TODO:显示文件上传进度
}
}, new OnRequestListener() {
@Override
public void onRequestSucceed(Request request, Response response) {
// TODO:服务器请求成功
}
@Override
public void onRequestFailed(Request request, Exception exception) {
// TODO:服务器请求失败
}
});
```
#### 文件下载
在res/新建xml文件夹,在xml文件夹新建path.xml
```
```
权限,注意6.0以上还需要动态申请权限
```
```
FileProvider配置
```
```
下载操作
```
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() {
@Override
public void onDownloading(long total, long progress) {
}
@Override
public void onDownloadCompleted(File file) {
}
@Override
public 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);
```