- 构造式编码。
- 支持链式请求。
- 支持并发式请求。
- 注解式request。
- response数自动校验&逻辑处理&数据注入。
- 支持restful风格。
- 请求本地缓存。
- 请求生命周期可伴随activity。
- 合并HOLD和TARGET的缓存策略,简化使用繁琐度。
- 修复在多线程读写请求缓存时,小几率出现数据错乱的bug。
- 优化了部分代码
dependencies {
api 'com.tpa.client:tina:1.1.0-beta'
annotationProcessor 'com.tpa.client:tina-compiler:1.0.0'
}
## request混淆
-keep public class * extends com.tpa.client.tina.model.TinaBaseRequest {
public void set*(***);
public *** get*();
public *** is*();
}
## response混淆
-keep public class * extends ${BaseResponseClass} {
*;
}
简单使用:
public interface TinaConfig {
/** httpclient配置 **/
public @NonNull OkHttpClient getOkhttpClient();
/** mediaType配置 **/
public @NonNull MediaType getMediaType();
/** 根地址 **/
public @NonNull String getHost();
/** 成功请求过滤 **/
public @Nonable TinaFilter getTinaFilter();
/** request数据转换器,一般用来加密请求body数据 **/
public @Nullable TinaConvert getRequestConvert();
}
Tina.initConfig(tinaConfig);
@Post("url")
public class Reqest extends TinaBaseRequest{
private String name = "tqf";
private String sex = "man";
}
------------------------------------------------------
Reqest request = new Reqest();
Tina.build()
.call(request)
.callBack(new TinaSingleCallBack<Response>() {
@Override
public void onSuccess(Response response) {
}
@Override
public void onFail(TinaException e) {
}
})
.request();
@Post("url")
public class Reqest extends TinaBaseRequest{
private String name = "tqf";
private String sex = "man";
}
----------------------------------------
Reqest request = new Reqest();
Tina.build(Tina.CHAINS)
.call(request)
.call(request)
.callBack(new TinaChainCallBack<TinaBaseResponse>() {
@Override
public Object onSuccess(Object feedbackResult,TinaBaseResponse response) {
return null;
}
@Override
public void onFail(TinaException e) {
}
})
.callBack(new TinaChainCallBack<TinaBaseResponse>() {
@Override
public Object onSuccess(Object feedbackResult, TinaBaseResponse response) {
return null;
}
@Override
public void onFail(TinaException e) {
}
})
.request();
- feedbackResult : 上一个请求传递过来的结果,没有则为null
- response : 本次请求的结果
- return : 传递给下个请求的结果,没有则返回null。返回TinaChain.FUSING则打断链式请求。
- 链式请求的addCall与addCallBack是通过构造顺序进行匹配的。
- 链式请求中执行到某一个请求fail时则会熔断请求链。
- 链式请求通过改变build参数(Tina.CONCURRENT)就可以转换成并发请求,但是返回的feedbackResult值都会变为null。
@Post("url")
public class Reqest extends TinaBaseRequest{
private String name = "tqf";
private String sex = "man";
}
----------------------------------------------------------
Reqest request = new Reqest();
Tina.build(Tina.CONCURRENT)
.call(request)
.call(request)
.callBack(new TinaSingleCallBack<TinaBaseResponse>() {
@Override
public void onSuccess(TinaBaseResponse response) {
}
@Override
public void onFail(TinaException e) {
}
})
.callBack(new TinaSingleCallBack<TinaBaseResponse>() {
@Override
public void onSuccess(TinaBaseResponse response) {
}
@Override
public void onFail(TinaException e) {
}
})
.request();
...
.startCallBack(new TinaStartCallBack() {
@Override
public void start() {
}
})
.endCallBack(new TinaEndCallBack() {
@Override
public void end() {
}
})
...
Tina.build()
.filter(new TinaFilter() {
@Override
public TinaFilterResult filter(TinaBaseRequest request, byte[] body, Class expect) {
return null;
}
})
...
/**
* 请求数据类型是bitmap类型
*/
Tina.build()
.filter(BitmapFilter.build())
.callBack(request)
.callBack(new TinaSingleCallBack<Bitmap>() {
@Override
public void onSuccess(Bitmap bitmap) {
}
@Override
public void onFail(TinaException e) {
}
})
.request();
Tina.build()
.deamon(activity)
...
请求会伴随activity的生命周期消亡而取消
@AutoMode
public class AnswererListResponse {
}
被@AutoModel注解的resposne会递归遍历整个response model,填充所有空对象。
if(data != null && data.getData1() != null && data.getData1().getData2 != null){
do(data.getData1().getData2());
}
else{
//do somethings
}
do(data.getData1().getData2());
- @AutoModel不会注入递归字段。
- @AutoModel不会注入静态字段。
- @AutoModel不会注入java.lang包下的基本类型字段(Float、Integer、Long、Double等)。
- 使用@IgnoreInfate可以忽略字段的注入。
- @AutoModel可以注入集合及集合里的数据(集合嵌套亦支持)。
@AutoMode
public class AnswererListResponse {
@NumberScale(2)
private String data;
}
- 保留小数位操作,银行家四舍五入算法,支持对string、float、double类型的小数位转换。
- 只在@AutoMote模式下才生效
- 支持对集合里的model操作。
@Cache(key = "key" , expire = 1000 , unit = TimeUnit.SECONDS)
public class Request extends TinaBaseRequest {
}
Request request = new Request();
// 单回调 命中缓存则不会发起网络请求
Tina.build()
.call(request)
.callBack(new TinaSingleCallBack<Response>() {
@Override
public void onSuccess(Response response) {
//response
}
@Override
public void onFail(TinaException exception) {
}
})
.request();
// 双回调 无论命中缓存与否 都会发起网络请求
Tina.build()
.call(request)
.callBack(new TinaSingleCacheCallBack<Response>() {
@Override
public void onSuccess(Response response) {
//fresh response
}
@Override
public void onCache(Response response) {
//cache response
}
@Override
public void onFail(TinaException exception) {
}
})
.request();
- key缺省值为 - url(支持Tina restful语法构建)
- expire缺省值为 - 永久
- unit缺省值为 - TimeUnit.SECONDS
支持
POST
、GET
、PUT
、DELETE
、PATCH
请求。 支持restful语义构建。
@Delete("/name/{name}/sex/{sex}")
public class Reqest extends TinaBaseRequest{
@Path("name")
private String name = "tqf";
@Path("sex")
private String sex = "man";
}
>>> DELETE /name/tqf/sex/man
@Delete("/name/:name/sex/:sex")
public class Reqest extends TinaBaseRequest{
private String name = "tqf";
private String sex = "man";
}
>>> DELETE /name/tqf/sex/man
@Delete("/name/:name/sex/:sex?")
public class Reqest extends TinaBaseRequest{
private String name = "tqf";
private String sex = null;
}
>>> DELETE /name/tqf/sex
@ConfigId("Pay")
class Config implements TinaConfig{
...
}
Tina.addConfig(new Config());
--- gradle clean build ---
/*
* 编译期 自动生成PayTina
*/
PayTina.build()...
首先将settings.jar下载下来保持到本地 >>>>> settings.jar
打开 AndroidStudio ,选择 Android Studio - File - Import Setttings
选择你刚刚下载的setting.jar
- tina_contract : 生成model contract
- tina_singleReq : 生成简单请求
- tina_singleReq2 : 生成带有endCallBack和startCallBack的简单请求
- tina_chainReq : 生成链式请求
- tina_chainReq2 : 生成带有endCallBack和startCallBack的链式请求
- tina_concurrentReq : 生成并发式请求
- tina_concurrentReq2 : 生成带有endCallBack和startCallBack的并发式请求
只提供简单参考,可根据自己的业务需求修改live templates