Android之封装好的异步网络请求框架
2024-08-22 16:03:53
1.简介
Android中网络请求一般使用Apache HTTP
Client或者采用HttpURLConnection,但是直接使用这两个类库需要写大量的代码才能完成网络post和get请求,而使用这个MyHttpUtils库可以大大的简化操作,它是基于HttpURLConnection,所有的请求都是独立在UI主线程之外,没有通过CommCallback回调方法处理请求结果,
没有了子线程、没有了handle,链式的变成使得代码更加清晰 。
2.特性
- 支持get、post请求,文件下载,上传等;
- 支持http和https的协议;
- 支持设置连接、读取超时时间(可选);
- 支持json格式的请求结果(无论json格式多复杂,都能搞定);
- 支持传入JavaBean对象(解析之后的javabean对象);
- 支持回调方法中反应传入javabean对象,这样可以在回调方法中直接拿到解析过后的javabean对象;
- 支持回调方法中更新UI(所以叫异步请求了)。
说明:java中一切皆对象,这里的JavaBean对象就是你请求接口之后返回的json数据所对应的实体,使用时返回的json数据可根据你给的对象自动解析并返回对象。
3.使用
gradle添加依赖(添加完之后Sync一下):
compile 'com.huangdali:myhttputils:2.0.2'
get:
public void onGet() {
String url = "http://gpj.zhangwoo.cn/app.php?platform=android&appkey=5a379b5eed8aaae531df5f60b12100cfb6dff2c1&c=member&a=getdepartments";
new MyHttpUtils()
.url(url)//请求的url
.setJavaBean(UserBean.class)//设置需要解析成的javabean对象
.setReadTimeout(60000)//设置读取超时时间,不设置的话默认为30s(30000)
.setConnTimeout(6000)//设置连接超时时间,不设置的话默认5s(5000)
.onExecute(new CommCallback<UserBean>() {//开始执行异步请求,传入一个通用回调对象,泛型为返回的javabean对象
@Override
public void onSucess(UserBean bean) {//成功之后回调
Util.showMsg(MainActivity.this, bean.getData().get(0).getDepartname());
} @Override
public void onFailed(String msg) {//失败时候回调
Util.showMsg(MainActivity.this, msg);
}
});
}
Post:
public void onPost() {
HashMap<String, String> param = new HashMap<>();
param.put("c", "member");
param.put("a", "getdepartments");
new MyHttpUtils()
.url(urls2)
.addParam(param)
.setJavaBean(UserBean.class)
.onExecuteByPost(new CommCallback<UserBean>() {///实体类自动解析
@Override
public void onSucess(UserBean remarkBean) {
Log.i("tag",remarkBean.toString());
Util.showMsg(MainActivity.this, remarkBean.getData().get(0).getDepartname());
}
@Override
public void onFailed(String msg) {
Util.showMsg(MainActivity.this, msg);
}
});
}
文件下载:
public void onDownload() {
String url = "http://avatar.csdn.net/8/6/0/2_dickyqie.jpg";
new MyHttpUtils()
.url(url)
.setFileSavePath("/sdcard/downloadtest")//不要这里只是填写文件保存的路径,不包括文件名哦
.setReadTimeout(5 * 60 * 1000)//由于下载文件耗时比较大,所以设置读取时间为5分钟
.downloadFile(new CommCallback<String>() {
@Override
public void onSucess(String msg) {
Util.showMsg(MainActivity.this, msg);
} @Override
public void onFailed(String s) { }
/**
* 可以重写进度回调方法
* @param total
* @param current
*/
@Override
public void onDownloading(long total, long current) {
tvProgress.setText("当前进度:" + new DecimalFormat("######0.00").format(((double) current / total) * 100) + "%");
}
});
}
别忘加网络权限
<uses-permission android:name="android.permission.INTERNET" />
文件上传和下载也需要添加权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
源码点击下载: https://github.com/DickyQie/android-network-request
最新文章
- Android MVP模式 谷歌官方代码解读
- python学习笔记之迭代器和函数(第三天)
- 两个APP跳转传值问题
- Java_Eclipse_Maven环境搭建
- Redis+Django(Session,Cookie)的用户系统
- Java I/O 对象序列化
- Java Web开发 之JavaBean整理
- JavaScript之共享onload
- 新增article注意事项
- 康盛(discuz )牛逼的PHP加解密算法函数
- DOM4J生成、解析XML实例
- Cordova入门系列(一)创建项目 转发 https://www.cnblogs.com/lishuxue/p/6008678.html
- Tips on GORM, Avoid Error about ";duplicate column name: id";
- VMware安装CentOS 6.9教程
- Do You Kown Asp.Net Core -- Asp.Net Core 2.0 未来web开发新趋势 Razor Page
- 爱因斯坦求和约定 (Einstein summation convention)
- 【JVM.6】虚拟机类加载机制
- Enum 扩展
- Map 接口
- find the most comfortable road(hdu1598)不错的并查集
热门文章
- Keepalived 安装
- Python: yield, python 实现tail -f
- Spring,Struts2,MyBatis,Activiti,Maven,H2,Tomcat集成(四)——Activiti集成
- linux常用命令:sort 命令
- python环境安装selenium和手动下载安装selenium的方法
- Windows10 64位下安装TensorFlow谷歌人工智能系统已官方原生支持
- Google&#39;s Machine Learning Crash Course #03# Reducing Loss
- Python入门之面向对象module,library,package之间区别
- html判断当前页面是否在iframe中/顶级document中
- django session 使用案例