当前位置: 首页 > news >正文

自己做网站如何月入3k如何成为app推广代理

自己做网站如何月入3k,如何成为app推广代理,开发一个功能网站多少钱,封面新闻是国家级媒体AutoNet (网络框架) AutoNet 代理了OkHttp, 处理了复杂繁琐的网络请求代码! 使Android开发网络应用更加简单,只需关注业务即可。 Git地址 1.Android版本: Android版AutoNet 2.ios版本: ios版AutoNet AutoNet 技术交流群…

AutoNet (网络框架)

AutoNet 代理了OkHttp, 处理了复杂繁琐的网络请求代码! 使Android开发网络应用更加简单,只需关注业务即可。

Git地址

1.Android版本:

Android版AutoNet

2.ios版本:

ios版AutoNet

AutoNet 技术交流群:

QQ: 141027175

Demo说明

  • app: AutoNet各个方式使用介绍
  • recommendeddemo: AutoNet推荐用法(注:Api使用了wanandroid的Api)

特色

  • 使用简单、调用方便
  • 支持注解、 链式
  • 支持实体类、map传值
  • 可防止内存泄漏(需继承RxFragmentActivity、或者RxFragment。并向AutoNet传入相应的生命周期)
  • 可动态添加和修改头部
  • 可对请求参数数据进行加密
  • 可自主处理返回的头部数据
  • 可自主处理返回的body数据
  • 可自定义返回数据的类型
  • 可定义固定、灵活及临时的域名、头部信息(优先级: 临时>灵活>固定。 有效性: 固定 >= 灵活 > 临时)
  • 支持网络策略(网络、本地、先本地后网络、先网络后本地)
  • 支持上传文件和下载文件
  • 可直接获得上游的Flowable, 用户自己进行操作结果。(eg: 使用zip去合并多个请求等)

gradle依赖

compile 'cn.xiaoxige:autonet-api:1.1.2'
annotationProcessor 'cn.xiaoxige:autonet-processor:1.1.2'
复制代码

使用

1. 初始化

1.1 AutoNetConfig(配置AutoNet的基本配置)注意:改配置基本是固定,如域名、头部数据

  • 设置是否开启Stetho调试配置
  • 设置默认域名(key: default)
  • 设置多个域名
  • 设置头部参数
  • 设置Okhttp的拦截器

1.2 AutoNet的初始化操作

AutoNet.getInstance().initAutoNet(Context, AutoNetConfig);
可以链式去设置加密的回调,头部数据的回调,Body数据的回调, eg:
AutoNet.getInstance().initAutoNet(Context, AutoNetConfig)
.setEncryptionCallback(new IAutoNetEncryptionCallback() {@Overridepublic String encryption(Long key, String encryptionContent) {// 可通过key去加密参数return encryptionContent;}}).setHeadsCallback(new IAutoNetHeadCallBack() {@Overridepublic void head(Object flag, Headers headers) {// 请求返回的头部数据回调}}).setBodyCallback(new IAutoNetBodyCallBack() {@Overridepublic boolean body(Object flag, String object, FlowableEmitter emitter) {// 自己处理需要返回truereturn false;}
});
还可以再次设置域名和头部数据(这里的配置为灵活的, 可在任意地方修改)
AutoNet.getInstance().updateOrInsertHead(key, value);
AutoNet.getInstance().updateOrInsertDomainNames(key, value);
复制代码

2. 回调介绍

回调需要继承实现AutoNet提供好的接口或者抽象类。AutoNet已经分类, 用户需要什么功能就去集成相应的接口或者抽象类即可
复制代码

2.1 IAutoNetDataBeforeCallBack(数据返回前的处理, 可定制要继续返回给客户前端的数据)

public interface IAutoNetDataBeforeCallBack<T> extends IAutoNetCallBack {// T为用户指定的body要返回的实体类(AutoNet会自动转换), emitter为Rxjava的上游, 可改变其返回结果。 如果自己处理需要返回true。eg: T为一个实体类, 里面有一个List集合, 我们在View层只需要关注List集合,则可以在这里直接重新定义并返回List集合, 并返回true。 (注意:其实这里还有一个功能就是, 根据自己的需求去判断是否集合为空更妙。emitter.onError(new EmptyError())。)boolean handlerBefore(T t, FlowableEmitter emitter);
}
复制代码

2.2 IAutoNetDataSuccessCallBack(只关心成功的数据, 不关心失败和数据为空的结果)

public interface IAutoNetDataSuccessCallBack<T> extends IAutoNetCallBack {// T为用户需要返回的实体类void onSuccess(T entity);
}
复制代码

2.3 IAutoNetDataCallBack(数据返回比较全的回调, 包含了数据成功、数据失败、数据为空)

public interface IAutoNetDataCallBack<T> extends IAutoNetDataSuccessCallBack<T> {// 失败void onFailed(Throwable throwable);// 数据为空(注意:如果不在IAutoNetDataBeforeCallBack去根据自己的业务去手动抛出emitter.onError(new EmptyError())的话, AutoNet是不知道你的业务是什么的, 所以在这个情况下AutoNet在body都为空的时候才调用onEmpty())void onEmpty();
}
复制代码

2.4 IAutoNetLocalOptCallBack(需要用到本地操作, eg:网络策略, 本地、 先本地后网络, 先网络后本地。 其实AutoNet并不能自动根据你的业务和字段给你建立数据库, 需要自己去实现)

public interface IAutoNetLocalOptCallBack extends IAutoNetCallBack {Object optLocalData(Map request);
}
复制代码

2.5 IAutoNetFileCallBack(文件操作时的回调, 需要关心上传错误等需要继承上面的IAutoNetDataCallBack)

public interface IAutoNetFileCallBack extends IAutoNetCallBack {// 上传文件或者下载文件的进度(0~100)void onPregress(float progress);// 上传成功或者下载成功后的File文件回调void onComplete(File file);
}
复制代码

2.6 AbsAutoNetCallback(数据回调的集合, 其实数据写这个就行了, 需要什么方法重写什么方法即可)

// 其中 T为返回的body的实体类,Z为自己处理后需要返回给View层后的实体类
public abstract class AbsAutoNetCallback<T, Z> implements IAutoNetDataBeforeCallBack<T>, IAutoNetDataCallBack<Z> {@Overridepublic boolean handlerBefore(T t, FlowableEmitter emitter) {return false;}@Overridepublic void onSuccess(Z entity) {}@Overridepublic void onFailed(Throwable throwable) {}@Overridepublic void onEmpty() {}
}
复制代码

3. 链式调用

AutoNet.getInstance().createNet()// 设置url后缀(除去域名).setSuffixUrl(String)// 设置一个标志, 会在全局的Head和Body中回调.setFlag(flag)// 参数.setParams(Map).setParam(key, value).setRequestEntity(IAutoNetRequest)// post请求(可传参数).doPost(...)// get请求(可传参数).doGet(...)// put(可传参数).doPut(...)// delete(可传参数).doDelete(...)// 指定使用的域名的Key(默认default).setDomainNameKey(String)// 设置网络请求方式.setNetPattern(NetPattern)// 设置网络策略.setNetStrategy(NetStrategy)// 设置请求类型(JSON/FORM/STREAM/OTHER).setReqType(Type)// 设置返回类型(JSON/FORM/STREAM/OTHER).setResType(Type)// 设置额外的参数(主要解决动态的拼在url中的参数。eg: www.xxx.com/news/1, 最后的那个1为动态).setExtraDynamicParam(String)// 临时的BaseUrl.setBaseUrl(String)// 链接超时时间.setConnectOutTime(Long)// 读取时间.setReadOuTime(Long)// 写入时间.setWriteOutTime(Long)// 需要加密的参数的key, 可根据key去加密其中类型的参数, 在初始化时使用到了,还记得吗(上去看看).setEncryptionKey(Long)// 设置MediaType.setMediaType(String)// 发送文件.setPullFileParams()// 接受文件.setPushFileParams()// 设置临时头部.setHeads(String[])// 绑定生命周期,防止内存泄漏(忘了?上面有说).setTransformer(...)// 数据回调(2章节中讲到的一些回调)(1).start(CallBack);// 获得上游, 用户自己处理结果(2).getFlowable();
复制代码

4. 获取上游并处理(已zip合并为例, 这里只是用了两个, 其实RxJava提供了好多, 当然还有其他用法,详情可以看RxJava的用法)

// 测试Json数据
Flowable flowable1 = AutoNet.getInstance().createNet().doGet().setParam("m", "ina_app").setParam("c", "other").setParam("a", "guidepage").setSuffixUrl("/init.php").setDomainNameKey("jsonTestBaseUrl").setResponseClazz(TestResponseEntity.class).getFlowable();// 测试百度数据(http://www.baidu.com)
Flowable flowable2 = AutoNet.getInstance().createNet().doGet().getFlowable();tvResult.setText("正在请求");//noinspection unchecked
Flowable.zip(flowable1, flowable2, new BiFunction<TestResponseEntity, String, ZipTestEntity>() {@Overridepublic ZipTestEntity apply(TestResponseEntity o, String o2) throws Exception {// 合并ZipTestEntity entity = new ZipTestEntity();entity.setEntity(o);entity.setBaiduWebMsg(o2);return entity;}
}).subscribe(new FlowableSubscriber<ZipTestEntity>() {@Overridepublic void onSubscribe(Subscription s) {s.request(Integer.MAX_VALUE);}@Overridepublic void onNext(ZipTestEntity o) {tvResult.setText(o.toString());}@Overridepublic void onError(Throwable t) {tvResult.setText("请求失败: " + t.getMessage());}@Overridepublic void onComplete() {}
});
复制代码

5. 注解方式

5.1 注解介绍

  • AutoNetAnontation 网络参数设置(value(除去域名)、writeTime、readTime、connectOutTime)
  • AutoNetBaseUrlKeyAnontation BaseUrl的选择标识key(value)
  • AutoNetDisposableBaseUrlAnontation 本次请求临时使用的BaseUrl(value)
  • AutoNetDisposableHeadAnnontation 本次请求临时使用的头部信息(value[])
  • AutoNetEncryptionAnontation 加密参数设置(key, value)
  • AutoNetMediaTypeAnontation 请求的MediaType(value)
  • AutoNetPatternAnontation 请求方式(value(get/post/put/delete))
  • AutoNetResponseEntityClass 请求返回的实体类(value)
  • AutoNetStrategyAnontation 网络请求策略(value(net/local/local_net/net_local))
  • AutoNetTypeAnontation 请求和返回的请求类型(reqType(json/form/stream), resType(json/form/stream))

5.2 代理类名规则

如果是回调是内部 则代理类名为 外层类名 + 回调类名 + AutoProxy
如果回调就是一个类 则代理类名为 回调类名 + AutoProxy
复制代码

5.3 注意

如果使用的是注解方式请求网络, 在写完类后,请build -> rebuild project。
复制代码

5.4 例子

一、普通请求

@AutoNetPatternAnontation(AutoNetPatternAnontation.NetPattern.GET)
@AutoNetAnontation("/init.php")
@AutoNetBaseUrlKeyAnontation("jsonTestBaseUrl")
public class doGet implements IAutoNetDataBeforeCallBack<TestResponseEntity>, IAutoNetDataCallBack<List<Entity>> {@Overridepublic boolean handlerBefore(TestResponseEntity o, FlowableEmitter emitter) {List<Entity> entitys = o.getList();if(entitys == null || entitys.isEmpty()){emitter.onError(new EmptyError());return true;}emitter.onNext(entitys);return true;}@Overridepublic void onSuccess(List<Entity> entitys) {}@Overridepublic void onFailed(Throwable throwable) {}@Overridepublic void onEmpty() {}
}先build下, 然后再需要发送该网络连接时:
MainActivitydoGetAutoProxy.startNet(MainActivity.this, bindUntilEvent(ActivityEvent.DESTROY));
注意:MainActivitydoGetAutoProxy这个类生成的规则前面已给出
复制代码

二、 上传文件

@AutoNetBaseUrlKeyAnontation("upFile")
@AutoNetTypeAnontation(reqType = AutoNetTypeAnontation.Type.STREAM)
@AutoNetPatternAnontation(AutoNetPatternAnontation.NetPattern.POST)
public class PushFile implements IAutoNetDataCallBack, IAutoNetFileCallBack {@Overridepublic void onFailed(Throwable throwable) {}@Overridepublic void onEmpty() {}@Overridepublic void onSuccess(Object entity) {}@Overridepublic void onPregress(float progress) {}@Overridepublic void onComplete(File file) {}
}请求方式:
MainActivityPushFileAutoProxy.pushFile(MainActivity.this, "upload", path + File.separator + "a.png");
复制代码

三、 下载文件

@AutoNetBaseUrlKeyAnontation("downFile")
@AutoNetTypeAnontation(resType = AutoNetTypeAnontation.Type.STREAM)
@AutoNetAnontation("/apk/downLoad/android_4.2.4.apk")
public class PullFile implements IAutoNetDataCallBack, IAutoNetFileCallBack {@Overridepublic void onFailed(Throwable throwable) {}@Overridepublic void onEmpty() {}@Overridepublic void onSuccess(Object entity) {// 不被执行}@Overridepublic void onPregress(float progress) {}@Overridepublic void onComplete(File file) {}
}请求方式:
MainActivityPullFileAutoProxy.pullFile(MainActivity.this, path, "pppig.apk");
复制代码

6. 简单的例子

初始化

AutoNetConfig config = new AutoNetConfig.Builder().isOpenStetho(BuildConfig.DEBUG).setDefaultDomainName(ApiConstant.BASE_POST_URL).build();AutoNet.getInstance().initAutoNet(this, config).setBodyCallback(new IAutoNetBodyCallBack() {@Overridepublic boolean body(Object flag, String body, FlowableEmitter emitter) {// 全局的, 所有的请求都会到这里// 在这里可以根据自己的统一的字段去判断code什么的是否成功了// 如果不成功可以以异常出去, 最后会在onFailed回调if (!TextUtils.isEmpty(body)) {try {BaseResponse baseResponse = new Gson().fromJson(body, BaseResponse.class);if (!baseResponse.isSuccess()) {emitter.onError(new CustomError(baseResponse.getMessage()));return true;}} catch (Exception e) {emitter.onError(e);return true;}}return false;}});
复制代码

简单使用

AutoNet.getInstance().createNet().setSuffixUrl("/test").setParam("a", "a").setParam("b", 1).doPost().start(new TestListCallback());
private class TestListCallback extends AbsAutoNetCallback<TestListResponse, List<TestEntity>> {@Overridepublic boolean handlerBefore(TestListResponse response, FlowableEmitter emitter) {// 这里可以在数据返回以前, 再次指定要返回的数据, 并根据自己的业务去判断是否为空(注意这里是在分线程中)List<TestEntity> entitys = response.getData();if (entitys == null || entitys.isEmpty()) {emitter.onError(new EmptyError());return true;}//noinspection uncheckedemitter.onNext(entitys);return true;}@Overridepublic void onSuccess(List<TestEntity> entitys) {bindUserInfo(entitys);mEmptyLayout.showContent();refreshLayout.refreshComplete();}@Overridepublic void onFailed(Throwable throwable) {HandlerError.handlerError(throwable);mEmptyLayout.showContent();refreshLayout.refreshComplete();}@Overridepublic void onEmpty() {HandlerError.handlerEmpty();mEmptyLayout.showContent();refreshLayout.refreshComplete();}
}
复制代码
http://www.lbrq.cn/news/2599561.html

相关文章:

  • dw做网站实例项目推广网
  • 美武汉有什么网站建设公司策划营销
  • 开发公司 张庆网站建设排名优化
  • 电脑版和手机版网站怎么做企业网站建设需求分析
  • 长沙岳麓区做网站郴州网络推广公司排名
  • wordpress+爱情主题公园seo排名分析
  • 做网站需要先买域名吗seo有哪些经典的案例
  • seo整站优化公司100%能上热门的文案
  • 深圳网站制作公司深圳网站制作公司seo和sem的区别是什么?
  • 外包服务属于什么行业百度网站的优化方案
  • 东莞工商注册代办公司注册沈阳seo排名收费
  • 房山青岛网站建设河南怎样做网站推广
  • 奶茶电商网站建设长沙靠谱seo优化费用
  • 网站开发需要准备什么软件网站如何优化
  • 惠州网站建设价格2022年传销最新消息
  • 介绍一个电影的网站模板企业网页设计公司
  • 沭阳做网站的公司百度广告投放技巧
  • 做团购网站有什么难处百度搜索大数据查询
  • 许昌市网站开发自动优化app
  • 太原网站建设方案策划seo内部优化具体做什么
  • 帮人做网站要怎么赚钱如何宣传推广自己的产品
  • 网站建设销售好做扬州seo博客
  • 阿里云服务器 多个网站百度网站下拉排名
  • 360度网站模板网站优化招商
  • 医院哪个科室负责网站建设客户管理系统
  • 可以做机械设计接单的网站软文推广软文营销
  • 家庭宽带做私人网站厦门seo厦门起梦
  • 世界工业设计大学排名前25seo关键词优化报价
  • 给别人做软件的网站发帖子的网站
  • 北京专业做网站推广深圳网站设计实力乐云seo
  • Linux 系统启动原理2
  • HTML 媒体元素概述
  • android开发 更改系统默认时区和默认语言
  • tc 介绍
  • SpringMVC在前后端分离架构中的执行流程详解
  • 多租户字典管理系统完整设计