AutoNet
来源:互联网 发布:java调用weka 编辑:程序博客网 时间:2024/06/13 03:42
# AutoNet
封装屏蔽Date及Presenter层代码, 使Android开发真正的只专注View层的编写
#Git地址:https://github.com/xiaoxige/AutoNet
#介绍:
#待加功能:
* 支持数据库操作
#更新说明:
更新的版本在release中查看(当前版本为1.0.3)
增加的功能用法在最后给出最新的用法
#新版特色:
使用起来更加简单, 可以动态拼接地址参数, 可发送和上传文件,进度自动回调。
#注:具体用法请看Demo
#使用:
1.注解介绍:
* 在项目的Gradle中加入依赖:
AutoNet-Api startUnSoftNet(IRequestEntity entity, IAutoNetDataCallback callback)(已过时)。entity:请求参数;callback:回调的类startSoftNet(IRequestEntity entity, FlowableTransformer transformer, IAutoNetDataCallback callback)(已过时)。entity:请求参数;transformer:可绑定RxLife生命周期;callback:回调的类startUnSoftNet(Object object)object:最外层的类实例startUnSoftNet(Object object, IRequestEntity entity)object:最外层的类实例;entity:请求参数startSoftNet(Object object, FlowableTransformer transformer)object:最外层的类实例;transformer:可绑定RxLife生命周期;startSoftNet(Object object, IRequestEntity entity, FlowableTransformer transformer)object:最外层的类实例;entity:请求参数;transformer:可绑定RxLife生命周期;startUnSoftNet(Object object, String extraParam);object:最外层的类实例;extraParam:额外地址参数;startUnSoftNet(Object object, IRequestEntity entity, String extraParam)object:最外层的类实例;entity:请求参数;extraParam:额外地址参数;startSoftNet(Object object, String extraParam, FlowableTransformer transformer)object:最外层的类实例;extraParam:额外地址参数;transformer:可绑定RxLife生命周期;startSoftNet(Object object, IRequestEntity entity, String extraParam, FlowableTransformer transformer)object:最外层的类实例;entity:请求参数;extraParam:额外地址参数;transformer:可绑定RxLife生命周期;pushFile(Object object, String fileKey, String path)object:最外层的类实例;fileKey:文件对应的key,和后台一致。path:上传文件路径;pushFile(Object object, IRequestEntity entity, String fileKey, String path)object:最外层的类实例;entity:请求参数;fileKey:文件对应的key,和后台一致。path:上传文件路径;pushFile(Object object, String fileKey, String path, FlowableTransformer transformer)object:最外层的类实例;fileKey:文件对应的key,和后台一致。path:上传文件路径;transformer:可绑定RxLife生命周期;pushFile(Object object, IRequestEntity entity, String fileKey, String path, FlowableTransformer transformer)object:最外层的类实例;entity:请求参数;fileKey:文件对应的key,和后台一致。path:上传文件路径;transformer:可绑定RxLife生命周期;pullFile(Object object, String path, String fileName)object:最外层的类实例;path:保存文件路径;fileName:保存文件名字;pullFile(Object object, IRequestEntity entity, String path, String fileName)object:最外层的类实例;entity:请求参数;path:保存文件路径;fileName:保存文件名字;pullFile(Object object, String path, String fileName, FlowableTransformer transformer) object:最外层的类实例;path:保存文件路径;fileName:保存文件名字;transformer:可绑定RxLife生命周期;pullFile(Object object, IRequestEntity entity, String path, String fileName, FlowableTransformer transformer)object:最外层的类实例;entity:请求参数;path:保存文件路径;fileName:保存文件名字;transformer:可绑定RxLife生命周期;
简单初始化入下:
.setBaseUrl(Map map)去设置更多的BaseUrl.
其中setHeader/setGetDelParams跟setBaseUrl设置方法一样。
下面的监听为加密的回调, 可以通过key去设置不同的加密方法
注意:
head/getdelparams/baseurl都提供了set和add的方法, set会把以前的清空, add则不会。
在设置公共的参数, head和getdelparms。设置上去是不会变化的, 如果需要改变其值,或者再次添加。可以调用AutoNet.getInstance().updateOrInsertHeader()和AutoNet.getInstance().updateOrInsertGetDelParam();方法去改变。比如去设置token, 当启动的时候token可能为空,在登入后就需要去更新下改头部的参数。
* 使用
在请求前, 先定义请求的参数类,和接受后的json数据类。请让你的请求参数类去实现IRequestEntity接口, 让你的接受后的json数据类去集成AutoResponseEntity。
如下所示:
比如我们要请求的场景为Get请求, 默认的BaseUrl, 不加密, url为/xxx.php
这样就直接请求了?肯定不是呀。先听我慢慢说
现在去ReBuild Project。编译完成后,在你需要去联网获得数据的时候去掉一个类的方法。该类的结构特点有如下:
如果该请求接口是内部类的话,其类名为外面的类名+该接口的类名+AutoProxy。如果是单独的类的话, 则是改类的前一级报名+该类的类名+AutoProxy,
该类中有两个方法, 一个是安全的网络请求, 一个是不安全的网络请求, 只要是是否绑定Rxlefe来定的。 如果使用安全的网络请求, 比如说吧, 你在Activity中写了改网络请求的接口, 那么这个Activity就要去集成RxActivity了。通过bindUntilEvent(ActivityEvent.DESTROY),使该生命周期和RxJave绑定。
则改接口类的写法如下:
支持了在普通类中进行网络请求:
如:
请求和依赖一样, 在发送请求的地方, 有一个重载的方法, 需要传入extraParam, 这个参数为String类型, 把要动态变化拼接的填入该参数即可。
比如, 请求的接口模型为:http://xxx.xxx.com/xxx/10123, 其中10123为动态参数, 则在请求网络的地方把该动态参数传入即可。如:XXX.startUnSoftNet(MainActivity.this, "" + 10123);即可
AutoNet可以十分方便的上传文件(进度回调及返回结果回调):
封装屏蔽Date及Presenter层代码, 使Android开发真正的只专注View层的编写
#Git地址:https://github.com/xiaoxige/AutoNet
#介绍:
* Android开发离不开网络请求后台数据。该项目也是一个封装请求网络的库。它完全解放了安卓开发的P层和D层代码, 使开发者只需要关注于View层的编写即可。* 使用方式,操作方式简单* 支持统一设置多个BaseUrl* 可以设置固定头部参数,Get、Delete请求的固定参数* 支持请求参数分别加密(分类加密)* 暂时支持Post/Get/Delete/Put请求* 支持使用Stetho调试查看网络请求、本地数据等* 封装OkHttp网络框架* 封装RxJava, RxLife, 可以使用网络请求防止内存泄漏* 支持请求网络直接返回Json对象* 支持了直接请求网络* 支持了普通类也能请求网络* 加入动态地址参数拼接(如 www.xxx.com/xxx/10121,最后的10121可以动态添加)* 增加上传文件功能(同时支持进度自动回调,及服务器最终相应结果回调)* 增加文件下载(支持进度自动回调)* 优化代码逻辑
#待加功能:
* 支持数据库操作
#更新说明:
更新的版本在release中查看(当前版本为1.0.3)
增加的功能用法在最后给出最新的用法
#新版特色:
使用起来更加简单, 可以动态拼接地址参数, 可发送和上传文件,进度自动回调。
#注:具体用法请看Demo
#使用:
1.注解介绍:
* AutoNetAnontation 网络请求相关。可以设置url(除去域名,BaseUrl统一设置)、连接时间,读取时间及写入的时间。默认为/* AutoNetBaseUrlKeyAnontation 设置本次请求使用的是哪一个域名(BaseUrl)。默认的Key是default。 如果使用默认的BaseUrl,不需要设置该注解* AutoNetEncyptionAnontation 设置本次是否数据加密,及加密的标识。可通过加密标识去设置不同的加密方式。如果不需要加密,不需要设置该注解* AutoNetPatternAnontation 设置请求的方式, Get, Post, Put, Delete. 默认为Get请求。 如果本次请求为Get请求,不需要设置该注解* AutoNetResponseEntityClass 设置返回Json对象的Class类型。通过设置该注解, audonet可以自动返回Json对象* AutoNetTypeAnontation 设置请求和接受类型, 有JSON和STREAM方式。默认请求和接受都是JSON类型,如果请求为STREAM则表示上传文件,如果接受为STREAM则表示下载文件;接受和请求不可同时为STREAM类型* AutoNetMediaTypeAnontation 设置上传文件时的mediaType, 需要和后台一致。默认为 application/octet-stream2.使用方式:
* 在项目的Gradle中加入依赖:
compile 'cn.xiaoxige:autonet-api:1.0.3'annotationProcessor 'cn.xiaoxige:autonet-processor:1.0.3'
3.API
* 初始化:
在Application中进行初始化:简单初始化入下:
Map head = new HashMap(); head.put("token", "xxx"); Map mapBaseUrl = new HashMap(); mapBaseUrl.put("BaseFileUrl", "http://www.pangpangpig.com"); mapBaseUrl.put("BaseFilePushUrl", "http://192.168.199.238:8080"); mapBaseUrl.put("jsonTestBaseUrl", "http://api.news18a.com"); AutoNetConfig config = new AutoNetConfig.Buidler() .setBaseUrl("http://www.baidu.com") .addBaseUrl(mapBaseUrl) .setHeader(head) .build(); AutoNet.getInstance().init(this, config).setAutoNetEncryption(new IAutoNetEncryptionCallback() { @Override public String encryption(long encryptionKey, String beforeValue) { return beforeValue; } });以上初始化设置了BaseUrl, 该BaseUrl没有设置key, 及为默认的key(default), 当然还可以通过
.setBaseUrl(Map map)去设置更多的BaseUrl.
其中setHeader/setGetDelParams跟setBaseUrl设置方法一样。
下面的监听为加密的回调, 可以通过key去设置不同的加密方法
注意:
head/getdelparams/baseurl都提供了set和add的方法, set会把以前的清空, add则不会。
在设置公共的参数, head和getdelparms。设置上去是不会变化的, 如果需要改变其值,或者再次添加。可以调用AutoNet.getInstance().updateOrInsertHeader()和AutoNet.getInstance().updateOrInsertGetDelParam();方法去改变。比如去设置token, 当启动的时候token可能为空,在登入后就需要去更新下改头部的参数。
* 使用
在请求前, 先定义请求的参数类,和接受后的json数据类。请让你的请求参数类去实现IRequestEntity接口, 让你的接受后的json数据类去集成AutoResponseEntity。
如下所示:
public class JsonTestRequestEntity implements IRequestEntity { private String m; private String c; private String a; public String getM() { return m; } public void setM(String m) { this.m = m; } public String getC() { return c; } public void setC(String c) { this.c = c; } public String getA() { return a; } public void setA(String a) { this.a = a; }} public class JsonTestResponseEntity extends AutoResponseEntity { private String status; private long code; private String message; private Data data; public static class Data{ ...... }}现在开始可以写请求的数据接口了:注意 请实现IAutoNetDataCallback接口, 泛型最好写出我们的数据要返回的类型
比如我们要请求的场景为Get请求, 默认的BaseUrl, 不加密, url为/xxx.php
我们就可以这样写
@AutoNetResponseEntityClass(value = JsonTestResponseEntity.class) @AutoNetPatternAnontation(value = AutoNetPatternAnontation.NetPattern.GET) @AutoNetAnontation(url = "/xxx.php") public class TestCallback implements IAutoNetDataCallback<TestResponseEntity> { @Override public void onSuccess(TestResponseEntity entity) { } @Override public void onEmpty() { } @Override public void onError(Throwable throwable) { } }对是的,没错这样就写好了。 数据会自动请求及返回。
这样就直接请求了?肯定不是呀。先听我慢慢说
现在去ReBuild Project。编译完成后,在你需要去联网获得数据的时候去掉一个类的方法。该类的结构特点有如下:
如果该请求接口是内部类的话,其类名为外面的类名+该接口的类名+AutoProxy。如果是单独的类的话, 则是改类的前一级报名+该类的类名+AutoProxy,
该类中有两个方法, 一个是安全的网络请求, 一个是不安全的网络请求, 只要是是否绑定Rxlefe来定的。 如果使用安全的网络请求, 比如说吧, 你在Activity中写了改网络请求的接口, 那么这个Activity就要去集成RxActivity了。通过bindUntilEvent(ActivityEvent.DESTROY),使该生命周期和RxJave绑定。
JsonTestRequestEntity entity = new JsonTestRequestEntity();entity.setA("guidepage");entity.setM("ina_app");entity.setC("other");cn.xiaoxige.autonet.MainActivityTestCallbackAutoProxy.startSoftNet(entity, bindUntilEvent(ActivityEvent.DESTROY), new TestCallback());再比如情景:Post请求,使用keyjsonTestBaseUrl的BaseUrl, 为需要加密,加密的type为1, 网络连接数据为15秒, url为/xxx.xxx
则改接口类的写法如下:
@AutoNetResponseEntityClass(value = TestResponseEntity.class) @AutoNetEncryptionAnontation(value = true, key = 1) @AutoNetBaseUrlKeyAnontation(value = "keyjsonTestBaseUrl") @AutoNetPatternAnontation(value = AutoNetPatternAnontation.NetPattern.POST) @AutoNetAnontation(url = "/xxx.xxx", connectOutTime = 15000) public class TestCallback implements IAutoNetDataCallback<TestResponseEntity> { @Override public void onSuccess(TestResponseEntity entity) { } @Override public void onEmpty() { } @Override public void onError(Throwable throwable) { } }其中就在Application的加密回调中,判断type用什么样的加密方法,把加密后的字符串返回即可。
支持了在普通类中进行网络请求:
如:
public class NormalClassNet { private TextView mTextView; public NormalClassNet() { } public NormalClassNet(TextView textView) { mTextView = textView; } @AutoNetResponseEntityClass(value = AutoResponseEntity.class) public class TestCallback implements IAutoNetDataCallback<AutoResponseEntity> { @Override public void onSuccess(AutoResponseEntity entity) { mTextView.setText("返回:" + entity.autoResponseResult + "\n" + "是否转Json对象失败:" + entity.isJsonTransformationError); } @Override public void onEmpty() { mTextView.setText("Get请求为空"); } @Override public void onError(Throwable throwable) { mTextView.setText(throwable.toString()); } } }在使用的时候更加的简单:
NormalClassNet normalClassNet = new NormalClassNet(tvResult); cn.xiaoxige.autonet.NormalClassNetTestCallbackAutoProxy.startUnSoftNet(normalClassNet); 注:tvResult 只要是为了显示可以直接请求网络数据:
@AutoNetResponseEntityClass(value = AutoResponseEntity.class) public class ImmediateNet implements IAutoNetDataCallback<AutoResponseEntity> { private TextView mTextView; public ImmediateNet() { } @Override public void onSuccess(AutoResponseEntity entity) { mTextView.setText("返回:" + entity.autoResponseResult + "\n" + "是否转Json对象失败:" + entity.isJsonTransformationError); } @Override public void onEmpty() { mTextView.setText("Get请求为空"); } @Override public void onError(Throwable throwable) { mTextView.setText(throwable.toString()); } public void setmTextView(TextView mTextView) { this.mTextView = mTextView; } }使用更加简单:
ImmediateNet immediateNet = new ImmediateNet(); immediateNet.setmTextView(tvResult); cn.xiaoxige.autonet.autonetImmediateNetAutoProxy.startUnSoftNet(immediateNet); 注:tvResult 只要是为了显示拼接动态地址参数
请求和依赖一样, 在发送请求的地方, 有一个重载的方法, 需要传入extraParam, 这个参数为String类型, 把要动态变化拼接的填入该参数即可。
比如, 请求的接口模型为:http://xxx.xxx.com/xxx/10123, 其中10123为动态参数, 则在请求网络的地方把该动态参数传入即可。如:XXX.startUnSoftNet(MainActivity.this, "" + 10123);即可
AutoNet可以十分方便的上传文件(进度回调及返回结果回调):
/** * 上传文件 */ @AutoNetBaseUrlKeyAnontation(value = "BaseFilePushUrl") @AutoNetTypeAnontation(reqType = AutoNetTypeAnontation.Type.STREAM) @AutoNetAnontation(url = "/FileUpload/FileUploadServlet") @AutoNetPatternAnontation(AutoNetPatternAnontation.NetPattern.POST) public class SendFileCallback extends AAutoNetStreamCallback { @Override public void onComplete(File file) { tvResult.setText("文件上传完成"); } @Override public void onPregress(float progress) { Log.e("TAG", "progress" + progress); tvResult.setText("上传进度" + progress + "%"); } @Override public void onEmpty() { tvResult.setText("数据为空"); } @Override public void onError(Throwable throwable) { tvResult.setText(throwable.toString()); } @Override public void onSuccess(AutoResponseEntity entity) { super.onSuccess(entity); tvResult.setText("返回:" + entity.autoResponseResult + "\n" + "是否转Json对象失败:" + entity.isJsonTransformationError + "\n\n" + "json: " + entity.toString()); } }在要上传文件的地方,传入该文件的地址即可, 还可以拼参数及文件一起上传哦!
/** * 文件可能不存在哦, 这只是测试 * (你可以先下载后在上传) * 改下载的地址及fileKey是本地Tomcat上的,在这里只是指明了一个使用方式而已 */ String path = getExternalFilesDir(null).toString(); /** * @param object 最外层类实例 * @param fileKey 发布文件的key, 需要和后台约定好 * @param path 要发送的文件的路径 */ cn.xiaoxige.autonet.MainActivitySendFileCallbackAutoProxy.pushFile(MainActivity.this, "photo1", path + File.separator + "xiaoxige.apk");AutoNet可轻松实现文件下载(进度回调):
/** * 下载文件 */ @AutoNetBaseUrlKeyAnontation(value = "BaseFileUrl") @AutoNetTypeAnontation(resType = AutoNetTypeAnontation.Type.STREAM) @AutoNetAnontation(url = "/APK/DownLoad/PangPangPig_102.apk") @AutoNetPatternAnontation(value = AutoNetPatternAnontation.NetPattern.POST) public class DownFileCallback extends AAutoNetStreamCallback { @Override public void onComplete(File file) { tvResult.setText("文件下载完成"); } @Override public void onPregress(float progress) { Log.e("TAG", "progress" + progress); tvResult.setText("下载进度" + progress + "%"); } @Override public void onEmpty() { tvResult.setText("数据为空"); } @Override public void onError(Throwable throwable) { tvResult.setText(throwable.toString()); } }在需要下载文件的地方, 把文件要保存的地址及文件保存的名字填入即可, 也可以传参数和下载文件同时哦!
String path = getExternalFilesDir(null).toString(); /** * @param object 最外层类实例 * @param path 文件保存的路径 * @param fileName 文件保存的名字 */ cn.xiaoxige.autonet.MainActivityDownFileCallbackAutoProxy.pullFile(MainActivity.this, path, "xiaoxige.apk");注意: 在返回的数据中, 每一个请求请求通了,就会吧字符串放到AutoResponseEntity的autoResponseResult中记录, 是否正确的转换成Json对象是在AutoResponseEntity的isJsonTransformationError字段记录。