1.简介
Android中网络请求通常使用Apache HTTP Client或者采用HttpURLConnection,可是直接使用这两个类库须要写大量的代码才能完成网络post和get请求,而使用这个MyHttpUtils库能够大大的简化操做,它是基于HttpURLConnection,全部的请求都是独立在UI主线程以外,没有经过CommCallback回调方法处理请求结果, 没有了子线程、没有了handle,链式的变成使得代码更加清晰 。php
2.特性 java
说明:java中一切皆对象,这里的JavaBean对象就是你请求接口以后返回的json数据所对应的实体,使用时返回的json数据可根据你给的对象自动解析并返回对象。android
3.使用git
gradle添加依赖(添加完以后Sync一下):github
compile 'com.huangdali:myhttputils:2.0.2'
get:json
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); } }); }
文件下载:app
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" />
文件上传和下载也须要添加权限ide
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />